summaryrefslogtreecommitdiff
path: root/src/fclist.c
diff options
context:
space:
mode:
authorAkira TAGOH <akira@tagoh.org>2019-11-01 14:43:42 +0900
committerAkira TAGOH <akira@tagoh.org>2019-11-01 14:44:47 +0900
commitb5bcf61fe789e66df2de609ec246cb7e4d326180 (patch)
treea828ae8bcca2cabbfcd00fc351056ab31804a556 /src/fclist.c
parenta45fc8a33256d9d3ea0ea7947f33c8e5e3cc7238 (diff)
downloadfontconfig-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.c25
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"