Fix deadlocks when seeking in pull mode failed and check new offset before using it
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Sun, 1 Feb 2009 15:58:51 +0000 (16:58 +0100)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Sun, 1 Feb 2009 16:00:33 +0000 (17:00 +0100)
gst/mxf/mxfdemux.c

index de1f3a0..70b8913 100644 (file)
@@ -2883,7 +2883,10 @@ gst_mxf_demux_seek_pull (GstMXFDemux * demux, GstEvent * event)
       }
       p->discont = TRUE;
     }
-    demux->offset = new_offset;
+    if (new_offset == -1)
+      goto no_new_offset;
+
+    demux->offset = new_offset + demux->run_in;
   }
 
   if (G_UNLIKELY (demux->close_seg_event)) {
@@ -2946,10 +2949,16 @@ wrong_rate:
   }
 unresolved_metadata:
   {
+    GST_PAD_STREAM_UNLOCK (demux->sinkpad);
     GST_WARNING_OBJECT (demux, "metadata can't be resolved");
     return FALSE;
   }
-
+no_new_offset:
+  {
+    GST_PAD_STREAM_UNLOCK (demux->sinkpad);
+    GST_WARNING_OBJECT (demux, "can't find new offset");
+    return FALSE;
+  }
 }
 
 static gboolean