audiosrc: avoid deadlock
authorWim Taymans <wim.taymans@collabora.co.uk>
Thu, 10 Nov 2011 15:00:28 +0000 (16:00 +0100)
committerWim Taymans <wim.taymans@collabora.co.uk>
Thu, 10 Nov 2011 15:05:19 +0000 (16:05 +0100)
gst-libs/gst/audio/gstaudiosrc.c

index 57864d1..0691e7c 100644 (file)
@@ -247,6 +247,11 @@ audioringbuffer_thread_func (GstRingBuffer * buf)
       GST_OBJECT_LOCK (abuf);
       if (!abuf->running)
         goto stop_running;
+      if (G_UNLIKELY (g_atomic_int_get (&buf->state) ==
+              GST_RING_BUFFER_STATE_STARTED)) {
+        GST_OBJECT_UNLOCK (abuf);
+        continue;
+      }
       GST_DEBUG_OBJECT (src, "signal wait");
       GST_AUDIORING_BUFFER_SIGNAL (buf);
       GST_DEBUG_OBJECT (src, "wait for action");