diff options
author | Behdad Esfahbod <behdad@behdad.org> | 2012-10-07 16:26:53 -0400 |
---|---|---|
committer | Behdad Esfahbod <behdad@behdad.org> | 2013-01-02 00:57:26 -0600 |
commit | 32b0d88923524c24f4be36733ebef5872b57b95a (patch) | |
tree | e67dfbd6dbcf679ef8f9c740dedf8ba65b839927 /src/fcdefault.c | |
parent | 7019896c99872b23d89b1404b02754cbc4ea1456 (diff) | |
download | fontconfig-32b0d88923524c24f4be36733ebef5872b57b95a.tar.gz |
Make FcDefaultFini() threadsafe
Diffstat (limited to 'src/fcdefault.c')
-rw-r--r-- | src/fcdefault.c | 19 |
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; } } |