You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by zw...@apache.org on 2013/03/31 03:14:56 UTC

[37/51] git commit: TS-1742: use __sync_val_compare_and_swap for atomic 16 byte reads

TS-1742: use __sync_val_compare_and_swap for atomic 16 byte reads

clang correctly emits cmpxchg16b for __sync_val_compare_and_swap(),
so let's use that instead of __sync_fetch_and_add().


Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/18aadb0c
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/18aadb0c
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/18aadb0c

Branch: refs/heads/3.3.x
Commit: 18aadb0c7b1a7f74935107764696bba702608635
Parents: 6309835
Author: James Peach <jp...@apache.org>
Authored: Mon Mar 25 12:30:58 2013 -0700
Committer: James Peach <jp...@apache.org>
Committed: Mon Mar 25 12:30:58 2013 -0700

----------------------------------------------------------------------
 lib/ts/ink_queue.h |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/18aadb0c/lib/ts/ink_queue.h
----------------------------------------------------------------------
diff --git a/lib/ts/ink_queue.h b/lib/ts/ink_queue.h
index 20fbf9a..8cd1cc9 100644
--- a/lib/ts/ink_queue.h
+++ b/lib/ts/ink_queue.h
@@ -72,7 +72,9 @@ extern "C"
 #endif
 
 #if TS_HAS_128BIT_CAS
-#define INK_QUEUE_LD(dst,src) *(__int128_t*)&(dst) = __sync_fetch_and_add((__int128_t*)&(src), 0)
+#define INK_QUEUE_LD(dst, src) do { \
+  *(__int128_t*)&(dst) = __sync_val_compare_and_swap((__int128_t*)&(src), 0, 0); \
+} while (0)
 #else
 #define INK_QUEUE_LD(dst,src) INK_QUEUE_LD64(dst,src)
 #endif