diff options
author | Akira TAGOH <akira@tagoh.org> | 2019-11-01 14:43:42 +0900 |
---|---|---|
committer | Akira TAGOH <akira@tagoh.org> | 2019-11-01 14:44:47 +0900 |
commit | b5bcf61fe789e66df2de609ec246cb7e4d326180 (patch) | |
tree | a828ae8bcca2cabbfcd00fc351056ab31804a556 /src/fclist.c | |
parent | a45fc8a33256d9d3ea0ea7947f33c8e5e3cc7238 (diff) | |
download | fontconfig-b5bcf61fe789e66df2de609ec246cb7e4d326180.tar.gz |
Use FcConfigReference/Destroy appropriately instead of FcConfigGetCurrent
This may improves to be MT-safe.
Reported at https://bugs.chromium.org/p/chromium/issues/detail?id=1004254
Diffstat (limited to 'src/fclist.c')
-rw-r--r-- | src/fclist.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/src/fclist.c b/src/fclist.c index 494bdea..053803b 100644 --- a/src/fclist.c +++ b/src/fclist.c @@ -491,11 +491,10 @@ FcFontSetList (FcConfig *config, { if (!FcInitBringUptoDate ()) goto bail0; - - config = FcConfigGetCurrent (); - if (!config) - goto bail0; } + config = FcConfigReference (config); + if (!config) + goto bail0; FcListHashTableInit (&table); if (!os) @@ -558,7 +557,7 @@ FcFontSetList (FcConfig *config, */ ret = FcFontSetCreate (); if (!ret) - goto bail0; + goto bail1; for (i = 0; i < FC_LIST_HASH_SIZE; i++) while ((bucket = table.buckets[i])) { @@ -570,6 +569,7 @@ FcFontSetList (FcConfig *config, if (destroy_os) FcObjectSetDestroy (os); + FcConfigDestroy (config); return ret; @@ -577,6 +577,7 @@ bail2: FcFontSetDestroy (ret); bail1: FcListHashTableCleanup (&table); + FcConfigDestroy (config); bail0: if (destroy_os) FcObjectSetDestroy (os); @@ -588,24 +589,26 @@ FcFontList (FcConfig *config, FcPattern *p, FcObjectSet *os) { - FcFontSet *sets[2]; + FcFontSet *sets[2], *ret; int nsets; if (!config) { if (!FcInitBringUptoDate ()) return 0; - - config = FcConfigGetCurrent (); - if (!config) - return 0; } + config = FcConfigReference (config); + if (!config) + return NULL; nsets = 0; if (config->fonts[FcSetSystem]) sets[nsets++] = config->fonts[FcSetSystem]; if (config->fonts[FcSetApplication]) sets[nsets++] = config->fonts[FcSetApplication]; - return FcFontSetList (config, sets, nsets, p, os); + ret = FcFontSetList (config, sets, nsets, p, os); + FcConfigDestroy (config); + + return ret; } #define __fclist__ #include "fcaliastail.h" |