From: RĂ©mi Denis-Courmont Date: Wed, 11 Feb 2009 21:11:23 +0000 (+0200) Subject: Fix one (of several) leaks in interaction X-Git-Tag: 1.0.0-pre1~723 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=3d5b9c5c3df14106ccb8d8706d2b32ddc30f99be;p=vlc Fix one (of several) leaks in interaction --- diff --git a/src/interface/interaction.c b/src/interface/interaction.c index 91032368f8..31110aace1 100644 --- a/src/interface/interaction.c +++ b/src/interface/interaction.c @@ -88,6 +88,14 @@ static int DialogSend( interaction_dialog_t * ); return VLC_EGENERIC; \ va_end( args ) +static inline int DialogFireForget( interaction_dialog_t *d ) +{ + int ret = DialogSend( d ); + if( ret == VLC_EGENERIC ) + DialogDestroy( d ); + return ret; +} + /** * Send an error message, both in a blocking and non-blocking way * @@ -112,7 +120,7 @@ int __intf_UserFatal( vlc_object_t *p_this, bool b_blocking, else p_new->i_flags = DIALOG_NONBLOCKING_ERROR; - return DialogSend( p_new ); + return DialogFireForget( p_new ); } /** @@ -135,7 +143,7 @@ int __intf_UserWarn( vlc_object_t *p_this, p_new->i_flags = DIALOG_WARNING; - return DialogSend( p_new ); + return DialogFireForget( p_new ); } /** @@ -165,7 +173,7 @@ int __intf_UserYesNo( vlc_object_t *p_this, p_new->psz_alternate_button = strdup( psz_alternate ); p_new->psz_other_button = psz_other ? strdup( psz_other ) : NULL; - return DialogSend( p_new ); + return DialogFireForget( p_new ); } /** @@ -277,7 +285,9 @@ int __intf_UserLoginPassword( vlc_object_t *p_this, i_ret = DialogSend( p_new ); - if( i_ret != DIALOG_CANCELLED && i_ret != VLC_EGENERIC ) + if( i_ret == VLC_EGENERIC ) + DialogDestroy( p_new ); + else if( i_ret != DIALOG_CANCELLED ) { *ppsz_login = p_new->psz_returned[0]? strdup( p_new->psz_returned[0] ) : NULL; @@ -311,7 +321,9 @@ int __intf_UserStringInput( vlc_object_t *p_this, i_ret = DialogSend( p_new ); - if( i_ret != DIALOG_CANCELLED ) + if( i_ret == VLC_EGENERIC ) + DialogDestroy( p_new ); + else if( i_ret != DIALOG_CANCELLED ) { *ppsz_usersString = p_new->psz_returned[0]? strdup( p_new->psz_returned[0] ) : NULL;