From 721539dc4f029afff5b40b35b42b48874f025f64 Mon Sep 17 00:00:00 2001 From: Vivia Nikolaidou Date: Fri, 13 Mar 2015 15:28:42 +0200 Subject: [PATCH] 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 --- gst/gstbus.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) 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); } /** -- 2.7.4