From 1eb2a256837fe1c707824f46140dc387f8f8d78e Mon Sep 17 00:00:00 2001 From: Thomas Vander Stichele Date: Tue, 29 Aug 2006 08:03:05 +0000 Subject: [PATCH] ext/vorbis/vorbisenc.c: fix buffer unreffing on a header push failure Original commit message from CVS: * ext/vorbis/vorbisenc.c: (gst_vorbis_enc_chain): fix buffer unreffing on a header push failure --- ChangeLog | 5 +++++ ext/vorbis/vorbisenc.c | 16 ++++++++-------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0550361868..fd6547d8cd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2006-08-29 Thomas Vander Stichele + + * ext/vorbis/vorbisenc.c: (gst_vorbis_enc_chain): + fix buffer unreffing on a header push failure + 2006-08-28 Wim Taymans * gst/audiorate/gstaudiorate.c: (gst_audio_rate_sink_event), diff --git a/ext/vorbis/vorbisenc.c b/ext/vorbis/vorbisenc.c index 088bcb7417..a148563087 100644 --- a/ext/vorbis/vorbisenc.c +++ b/ext/vorbis/vorbisenc.c @@ -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)