mplex: fix pad release and cleanup
authorMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
Tue, 10 Apr 2012 15:21:29 +0000 (17:21 +0200)
committerMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
Tue, 10 Apr 2012 15:21:29 +0000 (17:21 +0200)
ext/mplex/gstmplex.cc

index aa26f34..a08d683 100644 (file)
@@ -168,7 +168,8 @@ gst_mplex_finalize (GObject * object)
   while (walk) {
     GstMplexPad *mpad = (GstMplexPad *) walk->data;
 
-    gst_object_unref (mpad->pad);
+    if (mpad->pad)
+      gst_object_unref (mpad->pad);
     mpad->pad = NULL;
     walk = walk->next;
   }
@@ -660,12 +661,14 @@ gst_mplex_release_pad (GstElement * element, GstPad * pad)
 
     GST_MPLEX_MUTEX_LOCK (mplex);
     mpad->eos = TRUE;
-    gst_object_unref (mpad->pad);
+    g_assert (mpad->pad == pad);
     mpad->pad = NULL;
     /* wake up if waiting on this pad */
     GST_MPLEX_SIGNAL (mplex, mpad);
 
     padname = gst_object_get_name (GST_OBJECT (pad));
+    /* now only drop what might be last ref */
+    gst_object_unref (pad);
     if (strstr (padname, "audio")) {
       mplex->num_apads--;
     } else {