[Fontconfig] [patch] using ref count in FcInit() and FcFinit()

Behdad Esfahbod behdad at behdad.org
Mon Apr 20 08:33:30 PDT 2009


On 04/20/2009 01:39 AM, Vincent Torri wrote:
>
> Hey

Hey,

> to allow FcFini to be called the same number of times than FcInit, here
> is a patch that uses a ref count in these 2 functions.

Comments below.

> @@ -119,14 +121,20 @@ FcInit (void)
>   {
>       FcConfig	*config;
>
> +    if (!_fcInitCount)
> +    {
> +	if (_fcConfig)
> +	    return FcTrue;
> +	config = FcInitLoadConfigAndFonts ();
> +	if (!config)
> +	    return FcFalse;
> +	FcConfigSetCurrent (config);
> +	if (FcDebug()&  FC_DBG_MEMORY)
> +	    FcMemReport ();
> +    }
> +
> +    _fcInitCount++;
>       return FcTrue;
>   }

Currently one can do FcConfigDestroy(FcConfigGetCurrent()) to use a brand new 
configuration (ie. reset the default configuration).  However, everytime doing 
that causes an internal invocation of FcInit() and increasing the refcount. 
That's wrong.  I think we need a separate bool and a non-ref'ing _FcInit for 
the implicit initialization.  The implicit initialization should add up to 
only one reference.  Which is the one the unpaired FcFini() releases.

Also, the two return paths in the conditional do not increase the refcount and 
are hence wrong.  For example, if one does a FcConfigSetCurrent(), then the 
ref count will never increase and stay at zero.

Fix those and I'll happily commit this :).

behdad


More information about the Fontconfig mailing list