vlc | branch: master | Thomas Guillem <[email protected]> | Thu Jun 11 14:24:04 2020 +0200| [e597536f311e1d7cffa0103207a2e7e3e741a606] | committer: Thomas Guillem
lib: media_track: assert that tracks are deleted correctly This debug code assert that a track should not not deleted with libvlc_media_track_delete() when it comes from a list. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=e597536f311e1d7cffa0103207a2e7e3e741a606 --- lib/media_internal.h | 3 +++ lib/media_track.c | 17 +++++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/lib/media_internal.h b/lib/media_internal.h index 8acb116e8f..9807985179 100644 --- a/lib/media_internal.h +++ b/lib/media_internal.h @@ -83,6 +83,9 @@ typedef struct libvlc_media_trackpriv_t libvlc_subtitle_track_t subtitle; }; vlc_es_id_t *es_id; +#ifndef NDEBUG + bool from_list; /* true if the track is allocated from a tracklist */ +#endif } libvlc_media_trackpriv_t; static inline const libvlc_media_trackpriv_t * diff --git a/lib/media_track.c b/lib/media_track.c index b7b575698a..feca38f7ef 100644 --- a/lib/media_track.c +++ b/lib/media_track.c @@ -137,6 +137,7 @@ libvlc_media_track_delete( libvlc_media_track_t *track ) { libvlc_media_trackpriv_t *trackpriv = container_of( track, libvlc_media_trackpriv_t, t ); + assert( !trackpriv->from_list ); libvlc_media_track_clean( track ); if( trackpriv->es_id ) vlc_es_id_Release( trackpriv->es_id ); @@ -183,8 +184,13 @@ libvlc_media_tracklist_from_es_array( es_format_t **es_array, for( size_t i = 0; i < es_count; ++i ) { if( es_array[i]->i_cat == cat ) - libvlc_media_trackpriv_from_es( &list->tracks[count++], - es_array[i] ); + { + libvlc_media_trackpriv_t *trackpriv = &list->tracks[count++]; + libvlc_media_trackpriv_from_es( trackpriv, es_array[i] ); +#ifndef NDEBUG + trackpriv->from_list = true; +#endif + } } return list; @@ -211,6 +217,9 @@ libvlc_media_track_create_from_player_track( const struct vlc_player_track *trac if( trackpriv == NULL ) return NULL; libvlc_media_trackpriv_from_player_track( trackpriv, track ); +#ifndef NDEBUG + trackpriv->from_list = false; +#endif return &trackpriv->t; } @@ -231,6 +240,9 @@ libvlc_media_tracklist_from_player( vlc_player_t *player, libvlc_media_trackpriv_t *trackpriv = &list->tracks[i]; libvlc_media_trackpriv_from_player_track( trackpriv, track ); +#ifndef NDEBUG + trackpriv->from_list = true; +#endif } return list; @@ -255,6 +267,7 @@ libvlc_media_tracklist_delete( libvlc_media_tracklist_t *list ) for( size_t i = 0; i < list->count; ++i ) { libvlc_media_trackpriv_t *trackpriv = &list->tracks[i]; + assert( trackpriv->from_list ); libvlc_media_track_clean( &trackpriv->t ); if( trackpriv->es_id != NULL ) _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
