osxaudio: Take lock around sink/source before accessing the ringbuffer
authorArun Raghavan <git@arunraghavan.net>
Mon, 8 Dec 2014 17:08:22 +0000 (22:38 +0530)
committerArun Raghavan <git@arunraghavan.net>
Mon, 15 Dec 2014 05:49:52 +0000 (11:19 +0530)
https://bugzilla.gnome.org/show_bug.cgi?id=740987

sys/osxaudio/gstosxaudiosink.c
sys/osxaudio/gstosxaudiosrc.c

index fd8be0c..fffaf4e 100644 (file)
@@ -358,7 +358,12 @@ gst_osx_audio_sink_getcaps (GstBaseSink * sink, GstCaps * filter)
 
   gstelement_class = GST_ELEMENT_GET_CLASS (sink);
   osxsink = GST_OSX_AUDIO_SINK (sink);
+
+  GST_OBJECT_LOCK (osxsink);
   buf = GST_AUDIO_BASE_SINK (sink)->ringbuffer;
+  if (buf)
+    gst_object_ref (buf);
+  GST_OBJECT_UNLOCK (osxsink);
 
   if (buf) {
     GST_OBJECT_LOCK (buf);
@@ -380,6 +385,8 @@ gst_osx_audio_sink_getcaps (GstBaseSink * sink, GstCaps * filter)
       ret = gst_caps_ref (osxsink->cached_caps);
 
     GST_OBJECT_UNLOCK (buf);
+
+    gst_object_unref (buf);
   }
 
   if (ret && filter) {
index 99f48b8..8592b7c 100644 (file)
@@ -311,7 +311,12 @@ gst_osx_audio_src_get_caps (GstBaseSrc * src, GstCaps * filter)
 
   gstelement_class = GST_ELEMENT_GET_CLASS (src);
   osxsrc = GST_OSX_AUDIO_SRC (src);
+
+  GST_OBJECT_LOCK (osxsrc);
   buf = GST_AUDIO_BASE_SRC (src)->ringbuffer;
+  if (buf)
+    gst_object_ref (buf);
+  GST_OBJECT_UNLOCK (osxsrc);
 
   if (buf) {
     GST_OBJECT_LOCK (buf);
@@ -330,6 +335,7 @@ gst_osx_audio_src_get_caps (GstBaseSrc * src, GstCaps * filter)
     }
 
     GST_OBJECT_UNLOCK (buf);
+    gst_object_unref (buf);
   }
 
   if (!ret && osxsrc->cached_caps)