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 --- regint.h | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'regint.h') diff --git a/regint.h b/regint.h index 9fda5509a9..79867f7b6d 100644 --- a/regint.h +++ b/regint.h @@ -95,6 +95,7 @@ #ifndef RUBY_DEFINES_H #include "ruby/ruby.h" +#include "ruby_atomic.h" #undef xmalloc #undef xrealloc #undef xcalloc @@ -238,6 +239,10 @@ extern pthread_mutex_t gOnigMutex; #define ONIG_STATE_INC(reg) (reg)->state++ #define ONIG_STATE_DEC(reg) (reg)->state-- +#if SIZEOF_ATOMIC_T == SIZEOF_INT +#define ONIG_STATE_INC_THREAD(reg) (ATOMIC_INC((reg)->state)) +#define ONIG_STATE_DEC_THREAD(reg) (ATOMIC_DEC((reg)->state)) +#else #define ONIG_STATE_INC_THREAD(reg) do {\ THREAD_ATOMIC_START;\ (reg)->state++;\ @@ -248,6 +253,7 @@ extern pthread_mutex_t gOnigMutex; (reg)->state--;\ THREAD_ATOMIC_END;\ } while(0) +#endif #else #define ONIG_STATE_INC(reg) /* Nothing */ #define ONIG_STATE_DEC(reg) /* Nothing */ -- cgit v1.2.3