From c40a3a42e1e9cb47e5ac72dad2c54decb9c3a459 Mon Sep 17 00:00:00 2001
From: Michael Niedermayer <michaelni@gmx.at>
Date: Fri, 1 Oct 2004 16:30:15 +0000
Subject: [PATCH] move free() of AVStream priv data to av_write_trailer()

Originally committed as revision 3548 to svn://svn.ffmpeg.org/ffmpeg/trunk
---
 libavformat/ffm.c   | 2 --
 libavformat/mpeg.c  | 3 ---
 libavformat/utils.c | 9 ++++++---
 3 files changed, 6 insertions(+), 8 deletions(-)

diff --git a/libavformat/ffm.c b/libavformat/ffm.c
index 89764c3497..ce18d5fe9a 100644
--- a/libavformat/ffm.c
+++ b/libavformat/ffm.c
@@ -278,8 +278,6 @@ static int ffm_write_trailer(AVFormatContext *s)
         put_flush_packet(pb);
     }
 
-    for(i=0;i<s->nb_streams;i++)
-        av_freep(&s->streams[i]->priv_data);
     return 0;
 }
 #endif //CONFIG_ENCODERS
diff --git a/libavformat/mpeg.c b/libavformat/mpeg.c
index 1208880d0e..38ae418fd6 100644
--- a/libavformat/mpeg.c
+++ b/libavformat/mpeg.c
@@ -1012,9 +1012,6 @@ static int mpeg_mux_end(AVFormatContext *ctx)
     //put_be32(&ctx->pb, ISO_11172_END_CODE);
     //put_flush_packet(&ctx->pb);
 
-    for(i=0;i<ctx->nb_streams;i++)
-        av_freep(&ctx->streams[i]->priv_data);
-
     return 0;
 }
 #endif //CONFIG_ENCODERS
diff --git a/libavformat/utils.c b/libavformat/utils.c
index a6a823b6c5..c1ac6d14b4 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -2094,13 +2094,13 @@ int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt){
  * @return 0 if OK. AVERROR_xxx if error.  */
 int av_write_trailer(AVFormatContext *s)
 {
-    int ret;
+    int ret, i;
     
     for(;;){
         AVPacket pkt;
         ret= av_interleave_packet(s, &pkt, NULL, 1);
         if(ret<0) //FIXME cleanup needed for ret<0 ?
-            return ret;
+            goto fail;
         if(!ret)
             break;
         
@@ -2110,10 +2110,13 @@ int av_write_trailer(AVFormatContext *s)
         av_free_packet(&pkt);
         
         if(ret<0)
-            return ret; 
+            goto fail;
     }
 
     ret = s->oformat->write_trailer(s);
+fail:
+    for(i=0;i<s->nb_streams;i++)
+        av_freep(&s->streams[i]->priv_data);
     av_freep(&s->priv_data);
     return ret;
 }