Fix several misuse of gst_buffer_merge (it doesn't take ownership of any buffer)...
authorChristophe Fergeau <teuf@gnome.org>
Sat, 6 Mar 2004 20:56:28 +0000 (20:56 +0000)
committerChristophe Fergeau <teuf@gnome.org>
Sat, 6 Mar 2004 20:56:28 +0000 (20:56 +0000)
Original commit message from CVS:
2004-03-06  Christophe Fergeau  <teuf@gnome.org>

* ext/faac/gstfaac.c: (gst_faac_chain):
* ext/flac/gstflactag.c: (gst_flac_tag_chain):
* ext/libpng/gstpngenc.c: (user_write_data):
* ext/mikmod/gstmikmod.c: (gst_mikmod_loop):
* gst/ac3parse/gstac3parse.c: (gst_ac3parse_chain):
* gst/mpeg2sub/gstmpeg2subt.c: (gst_mpeg2subt_chain_subtitle):
* gst/mpegstream/gstrfc2250enc.c: (gst_rfc2250_enc_add_slice):
Fix several misuse of gst_buffer_merge (it doesn't take ownership
of any buffer), should fix some leaks. I hope I didn't unref buffers
that shouldn't be...

ChangeLog
ext/faac/gstfaac.c
gst/mpeg2sub/gstmpeg2subt.c

index c23146f..9e1a5c6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2004-03-06  Christophe Fergeau  <teuf@gnome.org>
+
+       * ext/faac/gstfaac.c: (gst_faac_chain):
+       * ext/flac/gstflactag.c: (gst_flac_tag_chain):
+       * ext/libpng/gstpngenc.c: (user_write_data):
+       * ext/mikmod/gstmikmod.c: (gst_mikmod_loop):
+       * gst/ac3parse/gstac3parse.c: (gst_ac3parse_chain):
+       * gst/mpeg2sub/gstmpeg2subt.c: (gst_mpeg2subt_chain_subtitle):
+       * gst/mpegstream/gstrfc2250enc.c: (gst_rfc2250_enc_add_slice):
+       Fix several misuse of gst_buffer_merge (it doesn't take ownership
+       of any buffer), should fix some leaks. I hope I didn't unref buffers
+       that shouldn't be...
+       
 2004-03-06  Thomas Vander Stichele  <thomas at apestaart dot org>
 
        * gst-libs/gst/media-info/media-info-priv.c: (have_type_callback),
index 01eb03a..7f53627 100644 (file)
@@ -471,9 +471,13 @@ gst_faac_chain (GstPad  *pad,
     /* do we have enough data for one frame? */
     if (in_size / faac->bps < faac->samples) {
       if (in_size > size) {
+       GstBuffer *merge;
         /* this is panic! we got a buffer, but still don't have enough
          * data. Merge them and retry in the next cycle... */
-        faac->cache = gst_buffer_merge (faac->cache, inbuf);
+        merge = gst_buffer_merge (faac->cache, inbuf);
+       gst_buffer_unref (faac->cache);
+       gst_buffer_unref (inbuf);
+       faac->cache = merge;
       } else if (in_size == size) {
         /* this shouldn't happen, but still... */
         faac->cache = inbuf;
@@ -495,11 +499,15 @@ gst_faac_chain (GstPad  *pad,
 
     /* create the frame */
     if (in_size > size) {
+      GstBuffer *merge;
       /* merge */
       subbuf = gst_buffer_create_sub (inbuf, 0, frame_size - (in_size - size));
       GST_BUFFER_DURATION (subbuf) =
        GST_BUFFER_DURATION (inbuf) * GST_BUFFER_SIZE (subbuf) / size;
-      subbuf = gst_buffer_merge (faac->cache, subbuf);
+      merge = gst_buffer_merge (faac->cache, subbuf);
+      gst_buffer_unref (faac->cache);
+      gst_buffer_unref (subbuf);
+      subbuf = merge;
       faac->cache = NULL;
     } else {
       subbuf = gst_buffer_create_sub (inbuf, size - in_size, frame_size);
index 1774b13..d267932 100644 (file)
@@ -369,10 +369,11 @@ gst_mpeg2subt_chain_subtitle (GstPad *pad, GstData *_data)
 
   /* deal with partial frame from previous buffer */
   if (mpeg2subt->partialbuf) {
-
-    mpeg2subt->partialbuf = gst_buffer_merge(mpeg2subt->partialbuf, buf);
-    /* and the one we received.. */
+    GstBuffer *merge;
+    merge = gst_buffer_merge(mpeg2subt->partialbuf, buf);
+    gst_buffer_unref (mpeg2subt->partialbuf);
     gst_buffer_unref(buf);
+    mpeg2subt->partialbuf = merge;
   }
   else {
     mpeg2subt->partialbuf = buf;