From 1b2279d6b5118fc00bc028340d14fe1e345a4ab4 Mon Sep 17 00:00:00 2001 From: Akira TAGOH Date: Fri, 24 Nov 2017 10:53:39 +0530 Subject: [PATCH] thread-safe functions in fchash.c --- src/fchash.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/fchash.c b/src/fchash.c index 7a320d5..9857abc 100644 --- a/src/fchash.c +++ b/src/fchash.c @@ -169,13 +169,15 @@ FcHashTableAdd (FcHashTable *table, return !ret; } + retry: for (prev = &table->buckets[hash % FC_HASH_SIZE]; - (b = *prev); prev = &(b->next)) + (b = fc_atomic_ptr_get (prev)); prev = &(b->next)) { if (!table->compare_func (bucket->key, key)) goto destroy; } - *prev = bucket; + if (!fc_atomic_ptr_cmpexch (prev, b, bucket)) + goto retry; return FcTrue; }