[vlc-devel] [PATCH 6/8] mkv: use a destructor to release all the resources allocated in an mkv_track_t

Steve Lhomme robux4 at videolabs.io
Mon Jul 31 15:02:58 CEST 2017


This way we can't forget any when releasing it from various places.
---
 modules/demux/mkv/matroska_segment.cpp       | 10 ----------
 modules/demux/mkv/matroska_segment_parse.cpp |  8 --------
 modules/demux/mkv/mkv.cpp                    | 11 +++++++++++
 modules/demux/mkv/mkv.hpp                    |  1 +
 4 files changed, 12 insertions(+), 18 deletions(-)

diff --git a/modules/demux/mkv/matroska_segment.cpp b/modules/demux/mkv/matroska_segment.cpp
index f4061d60ba..982792d347 100644
--- a/modules/demux/mkv/matroska_segment.cpp
+++ b/modules/demux/mkv/matroska_segment.cpp
@@ -65,16 +65,6 @@ matroska_segment_c::matroska_segment_c( demux_sys_t & demuxer, EbmlStream & estr
 
 matroska_segment_c::~matroska_segment_c()
 {
-    for( tracks_map_t::iterator it = tracks.begin(); it != tracks.end(); ++it)
-    {
-        mkv_track_t & track = *it->second;
-
-        es_format_Clean( &track.fmt );
-        delete track.p_compression_data;
-        delete track.p_sys;
-        free( track.p_extra_data );
-    }
-
     free( psz_writing_application );
     free( psz_muxing_application );
     free( psz_segment_filename );
diff --git a/modules/demux/mkv/matroska_segment_parse.cpp b/modules/demux/mkv/matroska_segment_parse.cpp
index c581fd99c2..dd48d078f7 100644
--- a/modules/demux/mkv/matroska_segment_parse.cpp
+++ b/modules/demux/mkv/matroska_segment_parse.cpp
@@ -673,8 +673,6 @@ void matroska_segment_c::ParseTrackEntry( const KaxTrackEntry *m )
     if( p_track->i_number == 0 )
     {
         msg_Warn( &sys.demuxer, "Missing KaxTrackNumber, discarding track!" );
-        es_format_Clean( &p_track->fmt );
-        free(p_track->p_extra_data);
         delete p_track;
         return;
     }
@@ -688,8 +686,6 @@ void matroska_segment_c::ParseTrackEntry( const KaxTrackEntry *m )
             zlib_decompress_extra( &sys.demuxer, *p_track ) )
         {
             msg_Err(&sys.demuxer, "Couldn't handle the track %u compression", p_track->i_number );
-            es_format_Clean( &p_track->fmt );
-            free(p_track->p_extra_data);
             delete p_track;
             return;
         }
@@ -697,8 +693,6 @@ void matroska_segment_c::ParseTrackEntry( const KaxTrackEntry *m )
         if( !TrackInit( p_track ) )
         {
             msg_Err(&sys.demuxer, "Couldn't init track %u", p_track->i_number );
-            es_format_Clean( &p_track->fmt );
-            free(p_track->p_extra_data);
             delete p_track;
             return;
         }
@@ -708,8 +702,6 @@ void matroska_segment_c::ParseTrackEntry( const KaxTrackEntry *m )
     else
     {
         msg_Err( &sys.demuxer, "Track Entry %u not supported", p_track->i_number );
-        es_format_Clean( &p_track->fmt );
-        free(p_track->p_extra_data);
         delete p_track;
     }
 }
diff --git a/modules/demux/mkv/mkv.cpp b/modules/demux/mkv/mkv.cpp
index bee64053e9..23e7adbc72 100644
--- a/modules/demux/mkv/mkv.cpp
+++ b/modules/demux/mkv/mkv.cpp
@@ -849,3 +849,14 @@ mkv_track_t::mkv_track_t(enum es_format_category_e es_cat) :
             break;
     }
 }
+
+mkv_track_t::~mkv_track_t()
+{
+    es_format_Clean( &fmt );
+    assert(p_es == NULL); // did we leak an ES ?
+
+    free(p_extra_data);
+
+    delete p_compression_data;
+    delete p_sys;
+}
diff --git a/modules/demux/mkv/mkv.hpp b/modules/demux/mkv/mkv.hpp
index 4022cf09fc..b3b175d9b4 100644
--- a/modules/demux/mkv/mkv.hpp
+++ b/modules/demux/mkv/mkv.hpp
@@ -184,6 +184,7 @@ class mkv_track_t
 {
     public:
         mkv_track_t(enum es_format_category_e es_cat);
+        ~mkv_track_t();
 
         typedef unsigned int track_id_t;
 
-- 
2.12.1



More information about the vlc-devel mailing list