[vlc-devel] [PATCH] config: only create the variables once in the object
Steve Lhomme
robux4 at ycbcr.xyz
Tue Mar 17 10:24:41 CET 2020
It seems the refcounting does work and reuses the first created instance
of the variable.
There is no matching var_Destroy for the variables created here, but
that's unrelated to this patch. When/if there is then we should make
sure we use the proper amount of Create/Destroy.
On 2020-03-16 15:13, Steve Lhomme wrote:
> config_LoadCmdLine() is called twice for the libvlc object and thus created the
> command-line option variables twice in the same object.
>
> We try to create the variable if the type doesn't match (unlikely) so we can
> assert later in the code.
> ---
> src/config/cmdline.c | 21 ++++++++++++++-------
> 1 file changed, 14 insertions(+), 7 deletions(-)
>
> diff --git a/src/config/cmdline.c b/src/config/cmdline.c
> index 72df85347a9..4b0d24ad130 100644
> --- a/src/config/cmdline.c
> +++ b/src/config/cmdline.c
> @@ -212,11 +212,13 @@ int config_LoadCmdLine( vlc_object_t *p_this, int i_argc,
> switch( CONFIG_CLASS(p_conf->i_type) )
> {
> case CONFIG_ITEM_STRING:
> - var_Create( p_this, psz_name, VLC_VAR_STRING );
> + if ( var_Type( p_this, psz_name ) != VLC_VAR_STRING )
> + var_Create( p_this, psz_name, VLC_VAR_STRING );
> var_SetString( p_this, psz_name, state.arg );
> break;
> case CONFIG_ITEM_INTEGER:
> - var_Create( p_this, psz_name, VLC_VAR_INTEGER );
> + if ( var_Type( p_this, psz_name ) != VLC_VAR_INTEGER )
> + var_Create( p_this, psz_name, VLC_VAR_INTEGER );
> var_Change( p_this, psz_name, VLC_VAR_SETMINMAX,
> (vlc_value_t){ .i_int = p_conf->min.i },
> (vlc_value_t){ .i_int = p_conf->max.i } );
> @@ -224,14 +226,16 @@ int config_LoadCmdLine( vlc_object_t *p_this, int i_argc,
> strtoll(state.arg, NULL, 0));
> break;
> case CONFIG_ITEM_FLOAT:
> - var_Create( p_this, psz_name, VLC_VAR_FLOAT );
> + if ( var_Type( p_this, psz_name ) != VLC_VAR_FLOAT )
> + var_Create( p_this, psz_name, VLC_VAR_FLOAT );
> var_Change( p_this, psz_name, VLC_VAR_SETMINMAX,
> (vlc_value_t){ .f_float = p_conf->min.f },
> (vlc_value_t){ .f_float = p_conf->max.f } );
> var_SetFloat( p_this, psz_name, us_atof(state.arg) );
> break;
> case CONFIG_ITEM_BOOL:
> - var_Create( p_this, psz_name, VLC_VAR_BOOL );
> + if ( var_Type( p_this, psz_name ) != VLC_VAR_BOOL )
> + var_Create( p_this, psz_name, VLC_VAR_BOOL );
> var_SetBool( p_this, psz_name, !flag );
> break;
> }
> @@ -246,11 +250,13 @@ int config_LoadCmdLine( vlc_object_t *p_this, int i_argc,
> switch( CONFIG_CLASS(pp_shortopts[i_cmd]->i_type) )
> {
> case CONFIG_ITEM_STRING:
> - var_Create( p_this, name, VLC_VAR_STRING );
> + if ( var_Type( p_this, name ) != VLC_VAR_STRING )
> + var_Create( p_this, name, VLC_VAR_STRING );
> var_SetString( p_this, name, state.arg );
> break;
> case CONFIG_ITEM_INTEGER:
> - var_Create( p_this, name, VLC_VAR_INTEGER );
> + if ( var_Type( p_this, name ) != VLC_VAR_INTEGER )
> + var_Create( p_this, name, VLC_VAR_INTEGER );
> if( i_cmd == 'v' )
> {
> i_verbose++; /* -v */
> @@ -263,7 +269,8 @@ int config_LoadCmdLine( vlc_object_t *p_this, int i_argc,
> }
> break;
> case CONFIG_ITEM_BOOL:
> - var_Create( p_this, name, VLC_VAR_BOOL );
> + if ( var_Type( p_this, name ) != VLC_VAR_BOOL )
> + var_Create( p_this, name, VLC_VAR_BOOL );
> var_SetBool( p_this, name, true );
> break;
> }
> --
> 2.17.1
>
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
>
More information about the vlc-devel
mailing list