[vlc-devel] [vlc-commits] Revert "libvlc: fix leaks if init fails"

Thomas Guillem thomas at gllm.fr
Tue Sep 20 17:07:42 CEST 2016



On Tue, Sep 20, 2016, at 16:50, Rémi Denis-Courmont wrote:
> vlc | branch: master | Rémi Denis-Courmont <remi at 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);
> +    }

Don't return an error here. That's why I broked the test suite, sorry
for that.

>  
>      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 at videolan.org
> https://mailman.videolan.org/listinfo/vlc-commits


More information about the vlc-devel mailing list