From 0599d7de5844a2f838cdf631b9c88b05010ebe5d Mon Sep 17 00:00:00 2001 From: nobu Date: Wed, 9 Dec 2015 06:48:15 +0000 Subject: use atomic operations * regcomp.c (onig_chain_link_add): use atomic operation instead of mutex. * regint.h (ONIG_STATE_{INC,DEC}_THREAD): ditto. * regparse.c (PopFreeNode, node_recycle): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52995 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- regcomp.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'regcomp.c') diff --git a/regcomp.c b/regcomp.c index 23cb0ead9a..176aa6b8ef 100644 --- a/regcomp.c +++ b/regcomp.c @@ -5663,10 +5663,11 @@ onig_transfer(regex_t* to, regex_t* from) extern void onig_chain_link_add(regex_t* to, regex_t* add) { - THREAD_ATOMIC_START; - REGEX_CHAIN_HEAD(to); - to->chain = add; - THREAD_ATOMIC_END; + /* THREAD_ATOMIC_START; */ + do { + REGEX_CHAIN_HEAD(to); + } while (IS_NOT_NULL(ATOMIC_PTR_CAS(to->chain, (regex_t* )NULL, add))); + /* THREAD_ATOMIC_END; */ } extern void -- cgit v1.2.3