pulsesink: Take a lock on the ringbuffer in acceptcaps
authorArun Raghavan <arun.raghavan@collabora.co.uk>
Fri, 10 May 2013 06:02:44 +0000 (11:32 +0530)
committerArun Raghavan <arun.raghavan@collabora.co.uk>
Mon, 10 Jun 2013 07:35:16 +0000 (13:05 +0530)
This is needed as a concurrent state change could pull the context or
stream out from under our feet.

https://bugzilla.gnome.org/show_bug.cgi?id=686459

ext/pulse/pulsesink.c

index c253832..0c46828 100644 (file)
@@ -2026,6 +2026,7 @@ gst_pulsesink_query_acceptcaps (GstPulseSink * psink, GstCaps * caps)
   if (pbuf == NULL)
     goto done;
 
+  GST_OBJECT_LOCK (pbuf);
   pa_threaded_mainloop_lock (mainloop);
 
   if (pbuf->context == NULL)
@@ -2114,6 +2115,7 @@ out:
   }
 
   pa_threaded_mainloop_unlock (mainloop);
+  GST_OBJECT_UNLOCK (pbuf);
 
   gst_caps_replace (&spec.caps, NULL);
   gst_object_unref (pbuf);