audiosink,audiosrc: ref the audio ring buffer class and type in class_init
authorTim-Philipp Müller <tim.muller@collabora.co.uk>
Mon, 15 Jun 2009 14:39:09 +0000 (15:39 +0100)
committerTim-Philipp Müller <tim.muller@collabora.co.uk>
Mon, 15 Jun 2009 14:39:09 +0000 (15:39 +0100)
Hack around thread-safety issues in GObject and our racy _get_type()
functions (we could easily fix the _get_type() functions, but we still
need to hack around the GObject class races until we require a newer
GLib version, I think).

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

index b4ceacb..479267e 100644 (file)
@@ -191,6 +191,10 @@ gst_audioringbuffer_class_init (GstAudioRingBufferClass * klass)
   gstringbuffer_class->delay = GST_DEBUG_FUNCPTR (gst_audioringbuffer_delay);
   gstringbuffer_class->activate =
       GST_DEBUG_FUNCPTR (gst_audioringbuffer_activate);
+
+  /* ref class from a thread-safe context to work around missing bit of
+   * thread-safety in GObject */
+  g_type_class_ref (GST_TYPE_AUDIORING_BUFFER);
 }
 
 typedef guint (*WriteFunc) (GstAudioSink * sink, gpointer data, guint length);
index 8974e23..ff183b8 100644 (file)
@@ -183,6 +183,10 @@ gst_audioringbuffer_class_init (GstAudioRingBufferClass * klass)
   gstringbuffer_class->stop = GST_DEBUG_FUNCPTR (gst_audioringbuffer_stop);
 
   gstringbuffer_class->delay = GST_DEBUG_FUNCPTR (gst_audioringbuffer_delay);
+
+  /* ref class from a thread-safe context to work around missing bit of
+   * thread-safety in GObject */
+  g_type_class_ref (GST_TYPE_AUDIORING_BUFFER);
 }
 
 typedef guint (*ReadFunc) (GstAudioSrc * src, gpointer data, guint length);