audio: Fix a race with the audioringbuffer thread
authorFabrice Bellet <fabrice@bellet.info>
Mon, 11 Apr 2016 09:28:09 +0000 (11:28 +0200)
committerJan Schmidt <jan@centricular.com>
Mon, 11 Apr 2016 11:43:13 +0000 (21:43 +1000)
There is a small window of time where the audio ringbuffer thread
can access the parent thread variable, before it's initialized
by the parent thread. The patch replaces this variable use by
g_thread_self().

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

gst-libs/gst/audio/gstaudiosink.c
gst-libs/gst/audio/gstaudiosrc.c

index ca2ceda..a804627 100644 (file)
@@ -232,7 +232,7 @@ audioringbuffer_thread_func (GstAudioRingBuffer * buf)
   message = gst_message_new_stream_status (GST_OBJECT_CAST (buf),
       GST_STREAM_STATUS_TYPE_ENTER, GST_ELEMENT_CAST (sink));
   g_value_init (&val, GST_TYPE_G_THREAD);
-  g_value_set_boxed (&val, sink->thread);
+  g_value_set_boxed (&val, g_thread_self ());
   gst_message_set_stream_status_object (message, &val);
   g_value_unset (&val);
   GST_DEBUG_OBJECT (sink, "posting ENTER stream status");
@@ -307,7 +307,7 @@ stop_running:
     message = gst_message_new_stream_status (GST_OBJECT_CAST (buf),
         GST_STREAM_STATUS_TYPE_LEAVE, GST_ELEMENT_CAST (sink));
     g_value_init (&val, GST_TYPE_G_THREAD);
-    g_value_set_boxed (&val, sink->thread);
+    g_value_set_boxed (&val, g_thread_self ());
     gst_message_set_stream_status_object (message, &val);
     g_value_unset (&val);
     GST_DEBUG_OBJECT (sink, "posting LEAVE stream status");
index 888fdf2..efd9947 100644 (file)
@@ -218,7 +218,7 @@ audioringbuffer_thread_func (GstAudioRingBuffer * buf)
   message = gst_message_new_stream_status (GST_OBJECT_CAST (buf),
       GST_STREAM_STATUS_TYPE_ENTER, GST_ELEMENT_CAST (src));
   g_value_init (&val, GST_TYPE_G_THREAD);
-  g_value_set_boxed (&val, src->thread);
+  g_value_set_boxed (&val, g_thread_self ());
   gst_message_set_stream_status_object (message, &val);
   g_value_unset (&val);
   GST_DEBUG_OBJECT (src, "posting ENTER stream status");
@@ -291,7 +291,7 @@ stop_running:
     message = gst_message_new_stream_status (GST_OBJECT_CAST (buf),
         GST_STREAM_STATUS_TYPE_LEAVE, GST_ELEMENT_CAST (src));
     g_value_init (&val, GST_TYPE_G_THREAD);
-    g_value_set_boxed (&val, src->thread);
+    g_value_set_boxed (&val, g_thread_self ());
     gst_message_set_stream_status_object (message, &val);
     g_value_unset (&val);
     GST_DEBUG_OBJECT (src, "posting LEAVE stream status");