From d430eb65c5e146681a5a1ff010d41c0fe7f55d67 Mon Sep 17 00:00:00 2001 From: Mersad Jelacic Date: Fri, 28 Oct 2011 13:58:47 +0200 Subject: [PATCH] audiosink: avoid deadlocking audioringbuffer thread ... when it goes into wait for ringbuffer starting just after such having been signalled. Fixes #661738. --- gst-libs/gst/audio/gstaudiosink.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/gst-libs/gst/audio/gstaudiosink.c b/gst-libs/gst/audio/gstaudiosink.c index ce919af5c3..ac39cb1bfa 100644 --- a/gst-libs/gst/audio/gstaudiosink.c +++ b/gst-libs/gst/audio/gstaudiosink.c @@ -265,6 +265,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 (sink, "signal wait"); GST_AUDIORING_BUFFER_SIGNAL (buf); GST_DEBUG_OBJECT (sink, "wait for action");