From d18a6b0a2c0847c57fb5364da646af76d58436a6 Mon Sep 17 00:00:00 2001 From: Arun Raghavan Date: Mon, 8 Dec 2014 22:38:22 +0530 Subject: [PATCH] osxaudio: Take lock around sink/source before accessing the ringbuffer https://bugzilla.gnome.org/show_bug.cgi?id=740987 --- sys/osxaudio/gstosxaudiosink.c | 7 +++++++ sys/osxaudio/gstosxaudiosrc.c | 6 ++++++ 2 files changed, 13 insertions(+) diff --git a/sys/osxaudio/gstosxaudiosink.c b/sys/osxaudio/gstosxaudiosink.c index fd8be0c8ea..fffaf4ec11 100644 --- a/sys/osxaudio/gstosxaudiosink.c +++ b/sys/osxaudio/gstosxaudiosink.c @@ -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) { diff --git a/sys/osxaudio/gstosxaudiosrc.c b/sys/osxaudio/gstosxaudiosrc.c index 99f48b84c8..8592b7c116 100644 --- a/sys/osxaudio/gstosxaudiosrc.c +++ b/sys/osxaudio/gstosxaudiosrc.c @@ -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)