message: revive async delivery message before bus thread can run unref
authorTim-Philipp Müller <tim@centricular.com>
Tue, 17 Feb 2015 20:47:23 +0000 (20:47 +0000)
committerTim-Philipp Müller <tim@centricular.com>
Tue, 17 Feb 2015 20:49:53 +0000 (20:49 +0000)
Revive message in dispose handler before we signal the bus thread,
otherwise the bus thread might be woken up and unref the message
before we had a chance to revive it yet.

gst/gstmessage.c

index 9f4d286..51282b9 100644 (file)
@@ -172,6 +172,9 @@ _gst_message_dispose (GstMessage * message)
   gboolean do_free = TRUE;
 
   if (GST_MINI_OBJECT_FLAG_IS_SET (message, GST_MESSAGE_FLAG_ASYNC_DELIVERY)) {
+    /* revive message, so bus can finish with it and clean it up */
+    gst_message_ref (message);
+
     GST_INFO ("[msg %p] signalling async free", message);
 
     GST_MESSAGE_LOCK (message);
@@ -179,7 +182,6 @@ _gst_message_dispose (GstMessage * message)
     GST_MESSAGE_UNLOCK (message);
 
     /* don't free it yet, let bus finish with it first */
-    gst_message_ref (message);
     do_free = FALSE;
   }