From: Vivia Nikolaidou Date: Fri, 13 Mar 2015 13:28:42 +0000 (+0200) Subject: bus: Unreferencing messages outside the lock X-Git-Tag: 1.6.1~491 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=721539dc4f029afff5b40b35b42b48874f025f64;p=platform%2Fupstream%2Fgstreamer.git bus: Unreferencing messages outside the lock Shouldn't take the lock while unreferencing messages, because that may cause more messages to be sent, which will try to take the lock and cause the app to hang. Fixes https://bugzilla.gnome.org/show_bug.cgi?id=728777 --- diff --git a/gst/gstbus.c b/gst/gstbus.c index 13b0546..9953210 100644 --- a/gst/gstbus.c +++ b/gst/gstbus.c @@ -446,6 +446,7 @@ void gst_bus_set_flushing (GstBus * bus, gboolean flushing) { GstMessage *message; + GList *l, *message_list = NULL; GST_OBJECT_LOCK (bus); @@ -455,13 +456,19 @@ gst_bus_set_flushing (GstBus * bus, gboolean flushing) GST_DEBUG_OBJECT (bus, "set bus flushing"); while ((message = gst_bus_pop (bus))) - gst_message_unref (message); + message_list = g_list_prepend (message_list, message); } else { GST_DEBUG_OBJECT (bus, "unset bus flushing"); GST_OBJECT_FLAG_UNSET (bus, GST_BUS_FLUSHING); } GST_OBJECT_UNLOCK (bus); + + for (l = message_list; l; l = l->next) { + message = GST_MESSAGE (l); + gst_message_unref (message); + } + g_list_free (message_list); } /**