summaryrefslogtreecommitdiff
path: root/signal.c
diff options
context:
space:
mode:
authorusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-02-14 07:22:21 +0000
committerusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-02-14 07:22:21 +0000
commit7493417468a731e73d0346e3bdb7bdc59d453735 (patch)
tree1a84e399312404f4694e5cd91adead8a4e4d8963 /signal.c
parent3941326541216dd630a5b1521a62950789ac19c3 (diff)
* ruby_atomic.h (ATOMIC_CAS): added.
* signal.c (ruby_atomic_compare_and_swap): ATOMIC_CAS implementation for non-VC/gcc platform. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_3@44950 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'signal.c')
-rw-r--r--signal.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/signal.c b/signal.c
index cda61d3d80..d4954fb21b 100644
--- a/signal.c
+++ b/signal.c
@@ -29,6 +29,17 @@ ruby_atomic_exchange(rb_atomic_t *ptr, rb_atomic_t val)
*ptr = val;
return old;
}
+
+rb_atomic_t
+ruby_atomic_compare_and_swap(rb_atomic_t *ptr, rb_atomic_t cmp,
+ rb_atomic_t newval)
+{
+ rb_atomic_t old = *ptr;
+ if (old == cmp) {
+ *ptr = newval;
+ }
+ return old;
+}
#endif
#if defined(__BEOS__) || defined(__HAIKU__)