ext/vorbis/vorbisenc.c: fix buffer unreffing on a header push failure
authorThomas Vander Stichele <thomas@apestaart.org>
Tue, 29 Aug 2006 08:03:05 +0000 (08:03 +0000)
committerThomas Vander Stichele <thomas@apestaart.org>
Tue, 29 Aug 2006 08:03:05 +0000 (08:03 +0000)
Original commit message from CVS:
* ext/vorbis/vorbisenc.c: (gst_vorbis_enc_chain):
fix buffer unreffing on a header push failure

ChangeLog
ext/vorbis/vorbisenc.c

index 0550361868ccb1a51629aaad4cacbb5ca791fb0c..fd6547d8cdaad9d182e65c02977235baf5fe18ff 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2006-08-29  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/vorbis/vorbisenc.c: (gst_vorbis_enc_chain):
+         fix buffer unreffing on a header push failure
+
 2006-08-28  Wim Taymans  <wim@fluendo.com>
 
        * gst/audiorate/gstaudiorate.c: (gst_audio_rate_sink_event),
index 088bcb7417f611455fe7e8084c2145a777e3c376..a1485630870cc0fcdac77eb7c9d93972fb8f7a02 100644 (file)
@@ -1091,16 +1091,17 @@ gst_vorbis_enc_chain (GstPad * pad, GstBuffer * buffer)
     gst_buffer_set_caps (buf3, caps);
 
     /* push out buffers */
+    /* push_buffer takes the reference even for failure */
     if ((ret = gst_vorbis_enc_push_buffer (vorbisenc, buf1)) != GST_FLOW_OK)
       goto failed_header_push;
-    buf1 = NULL;
-    if ((ret = gst_vorbis_enc_push_buffer (vorbisenc, buf2)) != GST_FLOW_OK)
+    if ((ret = gst_vorbis_enc_push_buffer (vorbisenc, buf2)) != GST_FLOW_OK) {
+      buf2 = NULL;
       goto failed_header_push;
-    buf2 = NULL;
-    if ((ret = gst_vorbis_enc_push_buffer (vorbisenc, buf3)) != GST_FLOW_OK)
+    }
+    if ((ret = gst_vorbis_enc_push_buffer (vorbisenc, buf3)) != GST_FLOW_OK) {
+      buf3 = NULL;
       goto failed_header_push;
-    buf3 = NULL;
-
+    }
 
     /* now adjust starting granulepos accordingly if the buffer's timestamp is
        nonzero */
@@ -1186,8 +1187,7 @@ not_setup:
 failed_header_push:
   {
     GST_WARNING_OBJECT (vorbisenc, "Failed to push headers");
-    if (buf1)
-      gst_buffer_unref (buf1);
+    /* buf1 is always already unreffed */
     if (buf2)
       gst_buffer_unref (buf2);
     if (buf3)