vlc | branch: master | Rémi Denis-Courmont <r...@remlab.net> | Tue Sep 20 17:49:55 2016 +0300| [0640f103865849973553153d8f79b1150307a58f] | committer: Rémi Denis-Courmont
Revert "libvlc: fix leaks if init fails" This reverts commit 67dc5082c467b5b544e41c71a11c8eb438f87161, which broke the test suite. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=0640f103865849973553153d8f79b1150307a58f --- lib/core.c | 1 - src/libvlc.c | 38 +++++++++++++++++++++----------------- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/lib/core.c b/lib/core.c index c0f9904..b06ed67 100644 --- a/lib/core.c +++ b/lib/core.c @@ -102,7 +102,6 @@ void libvlc_release( libvlc_instance_t *p_instance ) vlc_mutex_destroy( lock ); if( p_instance->libvlc_vlm.pf_release ) p_instance->libvlc_vlm.pf_release( p_instance ); - libvlc_Quit( p_instance->p_libvlc_int ); libvlc_InternalCleanup( p_instance->p_libvlc_int ); libvlc_InternalDestroy( p_instance->p_libvlc_int ); free( p_instance ); diff --git a/src/libvlc.c b/src/libvlc.c index 4ae358f..48c2b8c 100644 --- a/src/libvlc.c +++ b/src/libvlc.c @@ -125,7 +125,6 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, char * psz_parser = NULL; char * psz_control = NULL; char *psz_val; - int i_ret = VLC_EGENERIC; /* System specific initialization code */ system_Init(); @@ -169,7 +168,11 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, */ int vlc_optind; if( config_LoadCmdLine( p_libvlc, i_argc, ppsz_argv, &vlc_optind ) ) - goto error; + { + vlc_LogDeinit (p_libvlc); + module_EndBank (true); + return VLC_EGENERIC; + } vlc_LogInit(p_libvlc); @@ -184,13 +187,17 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, msg_Dbg( p_libvlc, "translation test: code is \"%s\"", _("C") ); if (config_PrintHelp (VLC_OBJECT(p_libvlc))) - goto error; + { + module_EndBank (true); + exit(0); + } if( module_count <= 1 ) { msg_Err( p_libvlc, "No plugins found! Check your VLC installation."); - i_ret = VLC_ENOMOD; - goto error; + vlc_LogDeinit (p_libvlc); + module_EndBank (true); + return VLC_ENOMOD; } #ifdef HAVE_DAEMON @@ -200,7 +207,9 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, if( daemon( 1, 0) != 0 ) { msg_Err( p_libvlc, "Unable to fork vlc to daemon mode" ); - goto error; + vlc_LogDeinit (p_libvlc); + module_EndBank (true); + return VLC_ENOMEM; } /* lets check if we need to write the pidfile */ @@ -227,10 +236,12 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, } #endif - i_ret = VLC_ENOMEM; - if( libvlc_InternalDialogInit( p_libvlc ) != VLC_SUCCESS ) - goto error; + { + vlc_LogDeinit (p_libvlc); + module_EndBank (true); + return VLC_ENOMEM; + } if( libvlc_InternalKeystoreInit( p_libvlc ) != VLC_SUCCESS ) msg_Warn( p_libvlc, "memory keystore init failed" ); @@ -356,15 +367,11 @@ dbus_out: * Initialize hotkey handling */ priv->actions = vlc_InitActions( p_libvlc ); - if( !priv->actions ) - goto error; /* * Meta data handling */ priv->parser = playlist_preparser_New(VLC_OBJECT(p_libvlc)); - if( !priv->parser ) - goto error; /* Create a variable for showing the fullscreen interface */ var_Create( p_libvlc, "intf-toggle-fscontrol", VLC_VAR_BOOL ); @@ -491,10 +498,6 @@ dbus_out: } return VLC_SUCCESS; - -error: - libvlc_InternalCleanup( p_libvlc ); - return i_ret; } /** @@ -507,6 +510,7 @@ void libvlc_InternalCleanup( libvlc_int_t *p_libvlc ) /* Ask the interfaces to stop and destroy them */ msg_Dbg( p_libvlc, "removing all interfaces" ); + libvlc_Quit( p_libvlc ); intf_DestroyAll( p_libvlc ); libvlc_InternalDialogClean( p_libvlc ); _______________________________________________ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits