diff options
author | Behdad Esfahbod <behdad@behdad.org> | 2012-10-07 14:41:38 -0400 |
---|---|---|
committer | Behdad Esfahbod <behdad@behdad.org> | 2013-01-02 00:51:00 -0600 |
commit | 64af9e1917114c789ad74dd28b3248f8c0525f45 (patch) | |
tree | 31023c299c7cdd6bfc9632e1ae103c8fbf839499 /src/fcpat.c | |
parent | 814871b2aaa3a22ef711ca4656507fb69c952156 (diff) | |
download | fontconfig-64af9e1917114c789ad74dd28b3248f8c0525f45.tar.gz |
Make refcounts, patterns, charsets, strings, and FcLang thread-safe
Diffstat (limited to 'src/fcpat.c')
-rw-r--r-- | src/fcpat.c | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/src/fcpat.c b/src/fcpat.c index 9d95266..c3b90d6 100644 --- a/src/fcpat.c +++ b/src/fcpat.c @@ -22,9 +22,8 @@ #include "fcint.h" #include "fcftint.h" -#include <stdlib.h> -#include <string.h> -#include <assert.h> + +/* Objects MT-safe for readonly access. */ FcPattern * FcPatternCreate (void) @@ -37,7 +36,7 @@ FcPatternCreate (void) p->num = 0; p->size = 0; p->elts_offset = FcPtrToOffset (p, NULL); - p->ref = 1; + FcRefInit (&p->ref, 1); return p; } @@ -362,13 +361,13 @@ FcPatternDestroy (FcPattern *p) if (!p) return; - if (p->ref == FC_REF_CONSTANT) + if (FcRefIsConst (&p->ref)) { FcCacheObjectDereference (p); return; } - if (--p->ref > 0) + if (FcRefDec (&p->ref) != 1) return; elts = FcPatternElts (p); @@ -546,7 +545,7 @@ FcPatternObjectListAdd (FcPattern *p, FcPatternElt *e; FcValueListPtr l, *prev; - if (p->ref == FC_REF_CONSTANT) + if (FcRefIsConst (&p->ref)) goto bail0; /* @@ -598,7 +597,7 @@ FcPatternObjectAddWithBinding (FcPattern *p, FcPatternElt *e; FcValueListPtr new, *prev; - if (p->ref == FC_REF_CONSTANT) + if (FcRefIsConst (&p->ref)) goto bail0; new = FcValueListCreate (); @@ -1060,8 +1059,8 @@ bail0: void FcPatternReference (FcPattern *p) { - if (p->ref != FC_REF_CONSTANT) - p->ref++; + if (!FcRefIsConst (&p->ref)) + FcRefInc (&p->ref); else FcCacheObjectReference (p); } @@ -1153,7 +1152,7 @@ bail0: * significant by any means. */ FcBool -FcSharedStrFree (const FcChar8 *name) +FcSharedStrFree (FcChar8 *name) { free (name); return FcTrue; @@ -1162,7 +1161,7 @@ FcSharedStrFree (const FcChar8 *name) const FcChar8 * FcSharedStr (const FcChar8 *name) { - return strdup (name); + return strdup ((const char *) name); } FcBool @@ -1195,7 +1194,7 @@ FcPatternSerialize (FcSerialize *serialize, const FcPattern *pat) return NULL; *pat_serialized = *pat; pat_serialized->size = pat->num; - pat_serialized->ref = FC_REF_CONSTANT; + FcRefSetConst (&pat_serialized->ref); elts_serialized = FcSerializePtr (serialize, elts); if (!elts_serialized) |