summaryrefslogtreecommitdiff
path: root/src/fcdefault.c
diff options
context:
space:
mode:
authorBehdad Esfahbod <behdad@behdad.org>2012-10-07 16:26:53 -0400
committerBehdad Esfahbod <behdad@behdad.org>2013-01-02 00:57:26 -0600
commit32b0d88923524c24f4be36733ebef5872b57b95a (patch)
treee67dfbd6dbcf679ef8f9c740dedf8ba65b839927 /src/fcdefault.c
parent7019896c99872b23d89b1404b02754cbc4ea1456 (diff)
downloadfontconfig-32b0d88923524c24f4be36733ebef5872b57b95a.tar.gz
Make FcDefaultFini() threadsafe
Diffstat (limited to 'src/fcdefault.c')
-rw-r--r--src/fcdefault.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/fcdefault.c b/src/fcdefault.c
index 62cf63b..2f13659 100644
--- a/src/fcdefault.c
+++ b/src/fcdefault.c
@@ -107,14 +107,19 @@ retry:
void
FcDefaultFini (void)
{
- if (default_lang) {
- free (default_lang);
- default_lang = NULL;
+ FcChar8 *lang;
+ FcStrSet *langs;
+
+ lang = fc_atomic_ptr_get (&default_lang);
+ if (lang && fc_atomic_ptr_cmpexch (&default_lang, lang, NULL)) {
+ free (lang);
}
- if (default_langs) {
- FcRefInit (&default_langs->ref, 1);
- FcStrSetDestroy (default_langs);
- default_langs = NULL;
+
+ langs = fc_atomic_ptr_get (&default_langs);
+ if (langs && fc_atomic_ptr_cmpexch (&default_langs, langs, NULL)) {
+ FcRefInit (&langs->ref, 1);
+ FcStrSetDestroy (langs);
+ langs = NULL;
}
}