gst/gstbus.c: The lock order should be maincontext > OBJECT_LOCK so we need to releas...
authorWim Taymans <wim.taymans@gmail.com>
Mon, 5 Jan 2009 15:41:00 +0000 (15:41 +0000)
committerWim Taymans <wim.taymans@gmail.com>
Mon, 5 Jan 2009 15:41:00 +0000 (15:41 +0000)
Original commit message from CVS:
* gst/gstbus.c: (gst_bus_wakeup_main_context):
The lock order should be maincontext > OBJECT_LOCK so we need to release
the object lock when waking up the mainloop to avoid deadlocks.

ChangeLog
gst/gstbus.c

index 9509ad70e9071036b613f2e560421f98f8a66e71..e17f1c3b68e4a89efed68692ce4b7a0f9e669177 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2009-01-05  Wim Taymans  <wim.taymans@collabora.co.uk>
+
+       * gst/gstbus.c: (gst_bus_wakeup_main_context):
+       The lock order should be maincontext > OBJECT_LOCK so we need to release
+       the object lock when waking up the mainloop to avoid deadlocks.
+
 2009-01-05  Wim Taymans  <wim.taymans@collabora.co.uk>
 
        * gst/gstbin.c: (gst_bin_set_index_func), (gst_bin_set_clock_func),
index f635034e76602474f35000cd2c708ef48e495d4c..670e9b24d568a4cabfc15f32329362f510b98353 100644 (file)
@@ -298,9 +298,17 @@ gst_bus_get_property (GObject * object, guint prop_id,
 static void
 gst_bus_wakeup_main_context (GstBus * bus)
 {
+  GMainContext *ctx;
+
   GST_OBJECT_LOCK (bus);
-  g_main_context_wakeup (bus->priv->main_context);
+  if ((ctx = bus->priv->main_context))
+    g_main_context_ref (ctx);
   GST_OBJECT_UNLOCK (bus);
+
+  g_main_context_wakeup (ctx);
+
+  if (ctx)
+    g_main_context_unref (ctx);
 }
 
 static void