Report more detailed logs instead of assertion.

Getting backtraces against this assertion isn't useful at all.
Fontconfig isn't capable to report who really have a reference
of caches though, this report may be better than assertion.
So we can try analysis tools then.
And report it only when running with FC_DEBUG=16.
This commit is contained in:
Akira TAGOH 2023-01-25 11:50:29 +09:00
parent 50c55e95f4
commit e3d9ad280a
1 changed files with 7 additions and 10 deletions

View File

@ -287,7 +287,7 @@ FcDirCacheUnlink (const FcChar8 *dir, FcConfig *config)
ret = FcFalse; ret = FcFalse;
goto bail; goto bail;
} }
while ((cache_dir = FcStrListNext (list))) while ((cache_dir = FcStrListNext (list)))
{ {
if (sysroot) if (sysroot)
@ -381,7 +381,7 @@ FcDirCacheProcess (FcConfig *config, const FcChar8 *dir,
list = FcStrListCreate (config->cacheDirs); list = FcStrListCreate (config->cacheDirs);
if (!list) if (!list)
return FcFalse; return FcFalse;
while ((cache_dir = FcStrListNext (list))) while ((cache_dir = FcStrListNext (list)))
{ {
FcChar8 *cache_hashed; FcChar8 *cache_hashed;
@ -794,20 +794,17 @@ FcCacheFini (void)
{ {
int i; int i;
for (i = 0; i < FC_CACHE_MAX_LEVEL; i++) if (FcDebug() & FC_DBG_CACHE)
{ {
if (FcDebug() & FC_DBG_CACHE) for (i = 0; i < FC_CACHE_MAX_LEVEL; i++)
{ {
if (fcCacheChains[i] != NULL) if (fcCacheChains[i] != NULL)
{ {
FcCacheSkip *s = fcCacheChains[i]; FcCacheSkip *s = fcCacheChains[i];
printf("Fontconfig error: not freed %p (dir: %s, refcount %" FC_ATOMIC_INT_FORMAT ")\n", s->cache, FcCacheDir(s->cache), s->ref.count); fprintf(stderr, "Fontconfig error: not freed %p (dir: %s, refcount %" FC_ATOMIC_INT_FORMAT ")\n", s->cache, FcCacheDir(s->cache), s->ref.count);
} }
} }
else
assert (fcCacheChains[i] == NULL);
} }
assert (fcCacheMaxLevel == 0);
free_lock (); free_lock ();
} }
@ -1019,7 +1016,7 @@ FcDirCacheMapFd (FcConfig *config, int fd, struct stat *fd_stat, struct stat *di
/* Mark allocated caches so they're freed rather than unmapped */ /* Mark allocated caches so they're freed rather than unmapped */
if (allocated) if (allocated)
cache->magic = FC_CACHE_MAGIC_ALLOC; cache->magic = FC_CACHE_MAGIC_ALLOC;
return cache; return cache;
} }
@ -1711,7 +1708,7 @@ FcCacheCopySet args1(const FcCache *c)
for (i = 0; i < old->nfont; i++) for (i = 0; i < old->nfont; i++)
{ {
FcPattern *font = FcFontSetFont (old, i); FcPattern *font = FcFontSetFont (old, i);
FcPatternReference (font); FcPatternReference (font);
if (!FcFontSetAdd (new, font)) if (!FcFontSetAdd (new, font))
{ {