Unref pads when iterating over them in analyse_source.
authorMichael Smith <msmith@songbirdnest.com>
Fri, 30 Jan 2009 18:38:17 +0000 (10:38 -0800)
committerMichael Smith <msmith@songbirdnest.com>
Sat, 31 Jan 2009 02:30:09 +0000 (18:30 -0800)
Fixes leak of source's srcpad when using uridecodebin.

gst/playback/gsturidecodebin.c

index ab34236..a030214 100644 (file)
@@ -943,12 +943,15 @@ analyse_source (GstURIDecodeBin * decoder, gboolean * is_raw,
         *have_out = TRUE;
 
         /* if FALSE, this pad has no caps and we continue with the next pad. */
-        if (!has_all_raw_caps (pad, is_raw))
+        if (!has_all_raw_caps (pad, is_raw)) {
+          gst_object_unref (pad);
           break;
+        }
 
         /* caps on source pad are all raw, we can add the pad */
         if (*is_raw)
           new_decoded_pad_cb (decoder->source, pad, FALSE, decoder);
+        gst_object_unref (pad);
         break;
     }
   }
@@ -1569,6 +1572,7 @@ decoder_query_duration_fold (GstPad * item, GValue * ret, QueryFold * fold)
   gst_object_unref (item);
   return TRUE;
 }
+
 static void
 decoder_query_duration_done (GstURIDecodeBin * dec, QueryFold * fold)
 {
@@ -1600,6 +1604,7 @@ decoder_query_position_fold (GstPad * item, GValue * ret, QueryFold * fold)
   gst_object_unref (item);
   return TRUE;
 }
+
 static void
 decoder_query_position_done (GstURIDecodeBin * dec, QueryFold * fold)
 {
@@ -1642,6 +1647,7 @@ decoder_query_latency_fold (GstPad * item, GValue * ret, QueryFold * fold)
   gst_object_unref (item);
   return TRUE;
 }
+
 static void
 decoder_query_latency_done (GstURIDecodeBin * dec, QueryFold * fold)
 {
@@ -1673,6 +1679,7 @@ decoder_query_seeking_fold (GstPad * item, GValue * ret, QueryFold * fold)
 
   return TRUE;
 }
+
 static void
 decoder_query_seeking_done (GstURIDecodeBin * dec, QueryFold * fold)
 {