# HG changeset patch # User vitor # Date 1267637484 0 # Node ID 7152149eb03fdd64d19944805840da55d3ab264d # Parent 192d6ebe32ff8e70f33a4b98b61394327318b5b3 Plug memory leak in NUT muxer and demuxer diff -r 192d6ebe32ff -r 7152149eb03f nut.c --- a/nut.c Wed Mar 03 17:26:00 2010 +0000 +++ b/nut.c Wed Mar 03 17:31:24 2010 +0000 @@ -69,6 +69,17 @@ } } +static void enu_free(void *opaque, void *elem) +{ + av_free(elem); +} + +void ff_nut_free_sp(NUTContext *nut) +{ + av_tree_enumerate(nut->syncpoints, NULL, NULL, enu_free); + av_tree_destroy(nut->syncpoints); +} + const Dispositions ff_nut_dispositions[] = { {"default" , AV_DISPOSITION_DEFAULT}, {"dub" , AV_DISPOSITION_DUB}, diff -r 192d6ebe32ff -r 7152149eb03f nut.h --- a/nut.h Wed Mar 03 17:26:00 2010 +0000 +++ b/nut.h Wed Mar 03 17:31:24 2010 +0000 @@ -110,6 +110,7 @@ int ff_nut_sp_pos_cmp(Syncpoint *a, Syncpoint *b); int ff_nut_sp_pts_cmp(Syncpoint *a, Syncpoint *b); void ff_nut_add_sp(NUTContext *nut, int64_t pos, int64_t back_ptr, int64_t ts); +void ff_nut_free_sp(NUTContext *nut); extern const Dispositions ff_nut_dispositions[]; diff -r 192d6ebe32ff -r 7152149eb03f nutdec.c --- a/nutdec.c Wed Mar 03 17:26:00 2010 +0000 +++ b/nutdec.c Wed Mar 03 17:31:24 2010 +0000 @@ -901,6 +901,7 @@ av_freep(&nut->time_base); av_freep(&nut->stream); + ff_nut_free_sp(nut); for(i = 1; i < nut->header_count; i++) av_freep(&nut->header[i]); diff -r 192d6ebe32ff -r 7152149eb03f nutenc.c --- a/nutenc.c Wed Mar 03 17:26:00 2010 +0000 +++ b/nutenc.c Wed Mar 03 17:31:24 2010 +0000 @@ -797,6 +797,7 @@ while(nut->header_count<3) write_headers(nut, bc); put_flush_packet(bc); + ff_nut_free_sp(nut); av_freep(&nut->stream); av_freep(&nut->time_base);