basesrc: make sure we wait and release the live lock
authorWim Taymans <wim.taymans@collabora.co.uk>
Mon, 10 Jan 2011 12:18:16 +0000 (13:18 +0100)
committerWim Taymans <wim.taymans@collabora.co.uk>
Mon, 10 Jan 2011 12:30:05 +0000 (13:30 +0100)
Make sure we release the live lock and wait in all cases when we need to wait
for the playing or flushing state change.

Fixes #635785

libs/gst/base/gstbasesrc.c

index 92391882fc00c69cbcf94e8fb33a2484e4a03d63..c4502236b690b4d5ba2d88da1aa41ddf93f1d72a 100644 (file)
@@ -491,14 +491,15 @@ gst_base_src_wait_playing (GstBaseSrc * src)
 {
   g_return_val_if_fail (GST_IS_BASE_SRC (src), GST_FLOW_ERROR);
 
-  while (G_UNLIKELY (!src->live_running)) {
+  do {
     /* block until the state changes, or we get a flush, or something */
     GST_DEBUG_OBJECT (src, "live source waiting for running state");
     GST_LIVE_WAIT (src);
     GST_DEBUG_OBJECT (src, "live source unlocked");
     if (src->priv->flushing)
       goto flushing;
-  }
+  } while (G_UNLIKELY (!src->live_running));
+
   return GST_FLOW_OK;
 
   /* ERRORS */