From b900a611a14169d80415c7f907d14509d43039b7 Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Duraffort?= Date: Wed, 20 May 2009 12:24:05 +0200 Subject: [PATCH] Fix memleak (same problem with var_Change()) --- src/control/video.c | 39 +++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/src/control/video.c b/src/control/video.c index cd36258c69..939ed59417 100644 --- a/src/control/video.c +++ b/src/control/video.c @@ -334,7 +334,7 @@ void libvlc_video_set_viewport( libvlc_instance_t *p_instance, libvlc_media_play } } #else - (void) p_instance; (void) view; (void) clip; (void) p_e; + (void) p_instance; (void) p_mi; (void) view; (void) clip; (void) p_e; #endif } @@ -417,13 +417,13 @@ int libvlc_video_get_spu( libvlc_media_player_t *p_mi, var_Change( p_input_thread, "spu-es", VLC_VAR_GETCHOICES, &val_list, NULL ); for( i = 0; i < val_list.p_list->i_count; i++ ) { - vlc_value_t spu_val = val_list.p_list->p_values[i]; - if( val.i_int == spu_val.i_int ) + if( val.i_int == val_list.p_list->p_values[i].i_int ) { i_spu = i; break; } } + var_Change( p_input_thread, "spu-es", VLC_VAR_FREELIST, &val_list, NULL ); vlc_object_release( p_input_thread ); return i_spu; } @@ -433,13 +433,17 @@ int libvlc_video_get_spu_count( libvlc_media_player_t *p_mi, { input_thread_t *p_input_thread = libvlc_get_input_thread( p_mi, p_e ); vlc_value_t val_list; + int i_spu_count; if( !p_input_thread ) return -1; var_Change( p_input_thread, "spu-es", VLC_VAR_GETCHOICES, &val_list, NULL ); + i_spu_count = val_list.p_list->i_count; + var_Change( p_input_thread, "spu-es", VLC_VAR_FREELIST, &val_list, NULL ); + vlc_object_release( p_input_thread ); - return val_list.p_list->i_count; + return i_spu_count; } libvlc_track_description_t * @@ -464,15 +468,13 @@ void libvlc_video_set_spu( libvlc_media_player_t *p_mi, int i_spu, if( val_list.p_list->i_count == 0 ) { libvlc_exception_raise( p_e, "Subtitle value out of range" ); - vlc_object_release( p_input_thread ); - return; + goto end; } if( (i_spu < 0) && (i_spu > val_list.p_list->i_count) ) { libvlc_exception_raise( p_e, "Subtitle value out of range" ); - vlc_object_release( p_input_thread ); - return; + goto end; } newval = val_list.p_list->p_values[i_spu]; @@ -481,6 +483,9 @@ void libvlc_video_set_spu( libvlc_media_player_t *p_mi, int i_spu, { libvlc_exception_raise( p_e, "Setting subtitle value failed" ); } + +end: + var_Change( p_input_thread, "spu-es", VLC_VAR_FREELIST, &val_list, NULL ); vlc_object_release( p_input_thread ); } @@ -653,13 +658,17 @@ int libvlc_video_get_track_count( libvlc_media_player_t *p_mi, { input_thread_t *p_input_thread = libvlc_get_input_thread( p_mi, p_e ); vlc_value_t val_list; + int i_track_count; if( !p_input_thread ) return -1; var_Change( p_input_thread, "video-es", VLC_VAR_GETCHOICES, &val_list, NULL ); + i_track_count = val_list.p_list->i_count; + var_Change( p_input_thread, "video-es", VLC_VAR_FREELIST, &val_list, NULL ); + vlc_object_release( p_input_thread ); - return val_list.p_list->i_count; + return i_track_count; } libvlc_track_description_t * @@ -693,13 +702,13 @@ int libvlc_video_get_track( libvlc_media_player_t *p_mi, var_Change( p_input_thread, "video-es", VLC_VAR_GETCHOICES, &val_list, NULL ); for( i = 0; i < val_list.p_list->i_count; i++ ) { - vlc_value_t track_val = val_list.p_list->p_values[i]; - if( track_val.i_int == val.i_int ) + if( val_list.p_list->p_values[i].i_int == val.i_int ) { i_track = i; break; - } + } } + var_Change( p_input_thread, "video-es", VLC_VAR_FREELIST, &val_list, NULL ); vlc_object_release( p_input_thread ); return i_track; } @@ -724,11 +733,13 @@ void libvlc_video_set_track( libvlc_media_player_t *p_mi, int i_track, i_ret = var_Set( p_input_thread, "audio-es", val ); if( i_ret < 0 ) libvlc_exception_raise( p_e, "Setting video track failed" ); - vlc_object_release( p_input_thread ); - return; + goto end; } } libvlc_exception_raise( p_e, "Video track out of range" ); + +end: + var_Change( p_input_thread, "video-es", VLC_VAR_FREELIST, &val_list, NULL ); vlc_object_release( p_input_thread ); } -- 2.20.1