You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@etch.apache.org by ve...@apache.org on 2012/08/02 17:19:24 UTC
svn commit: r1368526 - in
/incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu:
include/capu/os/ include/capu/os/arch/Linux_ARM_V7L/
include/capu/os/arch/Linux_X86_32/ include/capu/os/arch/Linux_X86_64/
include/capu/os/arch/Windows_X86_32/ i...
Author: veithm
Date: Thu Aug 2 15:19:23 2012
New Revision: 1368526
URL: http://svn.apache.org/viewvc?rev=1368526&view=rev
Log:
ETCH-132 Fix for thread-safeness of SmartPointer
Added return value to atomic operations which returns the old value
Change-Id: Ic49cb5fb274fdecf1db9ceec7a54769c16674df8
Modified:
incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/AtomicOperation.h
incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/arch/Linux_ARM_V7L/AtomicOperation.inc
incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/arch/Linux_X86_32/AtomicOperation.inc
incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/arch/Linux_X86_64/AtomicOperation.inc
incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/arch/Windows_X86_32/AtomicOperation.inc
incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/arch/Windows_X86_64/AtomicOperation.inc
incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/util/SmartPointer.h
incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/test/os/AtomicOperationTest.cpp
incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/test/os/arch/X86_32/AtomicOperation.inc
incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/test/os/arch/X86_64/AtomicOperation.inc
Modified: incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/AtomicOperation.h
URL: http://svn.apache.org/viewvc/incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/AtomicOperation.h?rev=1368526&r1=1368525&r2=1368526&view=diff
==============================================================================
--- incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/AtomicOperation.h (original)
+++ incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/AtomicOperation.h Thu Aug 2 15:19:23 2012
@@ -1,65 +1,65 @@
-/* $Id$
-*
-* Licensed to the Apache Software Foundation (ASF) under one or more
-* contributor license agreements. See the NOTICE file distributed with
-* this work for additional information regarding copyright ownership.
-* The ASF licenses this file to you under the Apache License, Version
-* 2.0 (the "License"); you may not use this file except in compliance
-* with the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-#ifndef __ATOMIC_OPERATION_H__
-#define __ATOMIC_OPERATION_H__
-
-#include "capu/Config.h"
-
-#define ATOMIC_OPERATION_INC_HEADER
-#include "arch/AtomicOperation.inc"
-#undef ATOMIC_OPERATION_INC_HEADER
-
-namespace capu
-{
- class AtomicOperation {
- public:
-
- /**
- * atomically add 'summand' to an uint32_t
- * @param mem reference to the object
- * @param summand amount to add
- */
- static void AtomicAdd32(volatile uint32_t &mem, uint32_t summand);
-
- /**
- * atomically subtract 'substrahend' from an uint32_t
- * @param mem reference to the object
- * @param subtrahend amount to subtract
- */
- static void AtomicSub32(volatile uint32_t &mem, uint32_t subtrahend);
-
- /**
- * atomically increment an uint32_t
- * @param mem reference to the object
- */
- static void AtomicInc32(volatile uint32_t &mem);
-
- /**
- * atomically decrement an uint32_t
- * @param mem reference to the object
- */
- static void AtomicDec32(volatile uint32_t &mem);
- };
-
-#define ATOMIC_OPERATION_INC_IMPL
-#include "arch/AtomicOperation.inc"
-#undef ATOMIC_OPERATION_INC_IMPL
-}
-
-#endif
+/* $Id$
+*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements. See the NOTICE file distributed with
+* this work for additional information regarding copyright ownership.
+* The ASF licenses this file to you under the Apache License, Version
+* 2.0 (the "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#ifndef __ATOMIC_OPERATION_H__
+#define __ATOMIC_OPERATION_H__
+
+#include "capu/Config.h"
+
+#define ATOMIC_OPERATION_INC_HEADER
+#include "arch/AtomicOperation.inc"
+#undef ATOMIC_OPERATION_INC_HEADER
+
+namespace capu
+{
+ class AtomicOperation {
+ public:
+
+ /**
+ * atomically add 'summand' to an uint32_t
+ * @param mem reference to the object
+ * @param summand amount to add
+ */
+ static uint32_t AtomicAdd32(volatile uint32_t &mem, uint32_t summand);
+
+ /**
+ * atomically subtract 'substrahend' from an uint32_t
+ * @param mem reference to the object
+ * @param subtrahend amount to subtract
+ */
+ static uint32_t AtomicSub32(volatile uint32_t &mem, uint32_t subtrahend);
+
+ /**
+ * atomically increment an uint32_t
+ * @param mem reference to the object
+ */
+ static uint32_t AtomicInc32(volatile uint32_t &mem);
+
+ /**
+ * atomically decrement an uint32_t
+ * @param mem reference to the object
+ */
+ static uint32_t AtomicDec32(volatile uint32_t &mem);
+ };
+
+#define ATOMIC_OPERATION_INC_IMPL
+#include "arch/AtomicOperation.inc"
+#undef ATOMIC_OPERATION_INC_IMPL
+}
+
+#endif
Modified: incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/arch/Linux_ARM_V7L/AtomicOperation.inc
URL: http://svn.apache.org/viewvc/incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/arch/Linux_ARM_V7L/AtomicOperation.inc?rev=1368526&r1=1368525&r2=1368526&view=diff
==============================================================================
--- incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/arch/Linux_ARM_V7L/AtomicOperation.inc (original)
+++ incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/arch/Linux_ARM_V7L/AtomicOperation.inc Thu Aug 2 15:19:23 2012
@@ -23,7 +23,9 @@
#endif
#ifdef ATOMIC_OPERATION_INC_IMPL
-inline void AtomicOperation::AtomicAdd32(volatile uint32_t &mem, uint32_t summand) {
+inline uint32_t AtomicOperation::AtomicAdd32(volatile uint32_t &mem, uint32_t summand) {
+ //TODO: Make this thread-safe
+ uint32_t oldValue = mem;
__asm__ volatile (
"1: ldrex r0, [%0] \n\t" //load mem into r0
"add r0, r0, %1 \n\t" //add summand to r0 and store result in r0
@@ -34,9 +36,14 @@ inline void AtomicOperation::AtomicAdd32
: "r" (&mem), "r"(summand)
: "r0" , "r1"
);
+
+ return oldValue;
}
-inline void AtomicOperation::AtomicSub32(volatile uint32_t &mem, uint32_t subtrahend) {
+inline uint32_t AtomicOperation::AtomicSub32(volatile uint32_t &mem, uint32_t subtrahend) {
+ //TODO: Make this thread-safe
+ uint32_t oldValue = mem;
+
__asm__ volatile (
"2: ldrex r0, [%0] \n\t" //load mem into r0
"sub r0, r0, %1 \n\t" //subs subthrahend from r0 and store result in r0
@@ -47,13 +54,15 @@ inline void AtomicOperation::AtomicSub32
: "r" (&mem), "r"(subtrahend)
: "r0" , "r1"
);
+
+ return oldValue;
}
-inline void AtomicOperation::AtomicInc32(volatile uint32_t &mem){
- AtomicAdd32(mem, 1);
+inline uint32_t AtomicOperation::AtomicInc32(volatile uint32_t &mem){
+ return AtomicAdd32(mem, 1);
}
-inline void AtomicOperation::AtomicDec32(volatile uint32_t &mem) {
- AtomicSub32(mem, 1);
+inline uint32_t AtomicOperation::AtomicDec32(volatile uint32_t &mem) {
+ return AtomicSub32(mem, 1);
}
#endif
Modified: incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/arch/Linux_X86_32/AtomicOperation.inc
URL: http://svn.apache.org/viewvc/incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/arch/Linux_X86_32/AtomicOperation.inc?rev=1368526&r1=1368525&r2=1368526&view=diff
==============================================================================
--- incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/arch/Linux_X86_32/AtomicOperation.inc (original)
+++ incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/arch/Linux_X86_32/AtomicOperation.inc Thu Aug 2 15:19:23 2012
@@ -23,27 +23,35 @@
#endif
#ifdef ATOMIC_OPERATION_INC_IMPL
-inline void AtomicOperation::AtomicAdd32(volatile uint32_t &mem, uint32_t summand) {
+inline uint32_t AtomicOperation::AtomicAdd32(volatile uint32_t &mem, uint32_t summand) {
//This code comes from the Apache APR project (apache-apr/1.4.2/atomic/unix/ia32.c)
- asm volatile ("lock; xaddl %0,%1"
+ asm volatile (
+ "lock; xaddl %0,%1"
: "=r" (summand), "=m" (mem)
: "0" (summand), "m" (mem)
: "memory", "cc");
+
+ return summand;
+
}
-inline void AtomicOperation::AtomicSub32(volatile uint32_t &mem, uint32_t subtrahend) {
+inline uint32_t AtomicOperation::AtomicSub32(volatile uint32_t &mem, uint32_t subtrahend) {
//This code comes from the Apache APR project (apache-apr/1.4.2/atomic/unix/ia32.c)
- asm volatile ("lock; subl %1, %0"
- : /* no output */
- : "m" (mem), "r" (subtrahend)
+ int32_t summand = subtrahend * -1;
+ asm volatile (
+ "lock; xaddl %0,%1"
+ : "=r" (summand), "=m" (mem)
+ : "0" (summand), "m" (mem)
: "memory", "cc");
+
+ return summand;
}
-inline void AtomicOperation::AtomicInc32(volatile uint32_t &mem) {
- AtomicAdd32(mem, 1);
+inline uint32_t AtomicOperation::AtomicInc32(volatile uint32_t &mem) {
+ return AtomicAdd32(mem, 1);
}
-inline void AtomicOperation::AtomicDec32(volatile uint32_t &mem) {
- AtomicSub32(mem, 1);
+inline uint32_t AtomicOperation::AtomicDec32(volatile uint32_t &mem) {
+ return AtomicSub32(mem, 1);
}
#endif
Modified: incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/arch/Linux_X86_64/AtomicOperation.inc
URL: http://svn.apache.org/viewvc/incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/arch/Linux_X86_64/AtomicOperation.inc?rev=1368526&r1=1368525&r2=1368526&view=diff
==============================================================================
--- incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/arch/Linux_X86_64/AtomicOperation.inc (original)
+++ incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/arch/Linux_X86_64/AtomicOperation.inc Thu Aug 2 15:19:23 2012
@@ -23,27 +23,33 @@
#endif
#ifdef ATOMIC_OPERATION_INC_IMPL
-inline void AtomicOperation::AtomicAdd32(volatile uint32_t &mem, uint32_t summand) {
+inline uint32_t AtomicOperation::AtomicAdd32(volatile uint32_t &mem, uint32_t summand) {
//This code comes from the Apache APR project (apache-apr/1.4.2/atomic/unix/ia32.c)
asm volatile ("lock; xadd %0,%1"
: "=r" (summand), "=m" (mem)
: "0" (summand), "m" (mem)
: "memory", "cc");
+
+ return summand;
}
-inline void AtomicOperation::AtomicSub32(volatile uint32_t &mem, uint32_t subtrahend) {
+inline uint32_t AtomicOperation::AtomicSub32(volatile uint32_t &mem, uint32_t subtrahend) {
//This code comes from the Apache APR project (apache-apr/1.4.2/atomic/unix/ia32.c)
- asm volatile ("lock; sub %1, %0"
- : /* no output */
- : "m" (mem), "r" (subtrahend)
+
+ int32_t summand = subtrahend * -1;
+ asm volatile ("lock; xadd %0,%1"
+ : "=r" (summand), "=m" (mem)
+ : "0" (summand), "m" (mem)
: "memory", "cc");
+
+ return summand;
}
-inline void AtomicOperation::AtomicInc32(volatile uint32_t &mem) {
- AtomicAdd32(mem, 1);
+inline uint32_t AtomicOperation::AtomicInc32(volatile uint32_t &mem) {
+ return AtomicAdd32(mem, 1);
}
-inline void AtomicOperation::AtomicDec32(volatile uint32_t &mem) {
- AtomicSub32(mem, 1);
+inline uint32_t AtomicOperation::AtomicDec32(volatile uint32_t &mem) {
+ return AtomicSub32(mem, 1);
}
#endif
Modified: incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/arch/Windows_X86_32/AtomicOperation.inc
URL: http://svn.apache.org/viewvc/incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/arch/Windows_X86_32/AtomicOperation.inc?rev=1368526&r1=1368525&r2=1368526&view=diff
==============================================================================
--- incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/arch/Windows_X86_32/AtomicOperation.inc (original)
+++ incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/arch/Windows_X86_32/AtomicOperation.inc Thu Aug 2 15:19:23 2012
@@ -25,19 +25,20 @@
#ifdef ATOMIC_OPERATION_INC_IMPL
-inline void AtomicOperation::AtomicAdd32(volatile uint32_t &mem, uint32_t summand){
- InterlockedExchangeAdd((long*)&mem, summand);
+inline uint32_t AtomicOperation::AtomicAdd32(volatile uint32_t &mem, uint32_t summand){
+ return InterlockedExchangeAdd((long*)&mem, summand);
}
-inline void AtomicOperation::AtomicSub32(volatile uint32_t &mem, uint32_t subtrahend) {
- InterlockedExchangeAdd((long*)&mem, 0-subtrahend);
+inline uint32_t AtomicOperation::AtomicSub32(volatile uint32_t &mem, uint32_t subtrahend) {
+ return InterlockedExchangeAdd((long*)&mem, 0-subtrahend);
}
-inline void AtomicOperation::AtomicInc32(volatile uint32_t &mem) {
- AtomicAdd32(mem, 1);
+inline uint32_t AtomicOperation::AtomicInc32(volatile uint32_t &mem) {
+ return AtomicAdd32(mem, 1);
}
-inline void AtomicOperation::AtomicDec32(volatile uint32_t &mem) {
- AtomicSub32(mem, 1);
+inline uint32_t AtomicOperation::AtomicDec32(volatile uint32_t &mem) {
+ return AtomicSub32(mem, 1);;
+
}
#endif
Modified: incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/arch/Windows_X86_64/AtomicOperation.inc
URL: http://svn.apache.org/viewvc/incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/arch/Windows_X86_64/AtomicOperation.inc?rev=1368526&r1=1368525&r2=1368526&view=diff
==============================================================================
--- incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/arch/Windows_X86_64/AtomicOperation.inc (original)
+++ incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/arch/Windows_X86_64/AtomicOperation.inc Thu Aug 2 15:19:23 2012
@@ -25,19 +25,19 @@
#ifdef ATOMIC_OPERATION_INC_IMPL
-inline void AtomicOperation::AtomicAdd32(volatile uint32_t &mem, uint32_t summand){
- InterlockedExchangeAdd((long*)&mem, summand);
+inline uint32_t AtomicOperation::AtomicAdd32(volatile uint32_t &mem, uint32_t summand){
+ return InterlockedExchangeAdd((long*)&mem, summand);
}
-inline void AtomicOperation::AtomicSub32(volatile uint32_t &mem, uint32_t subtrahend) {
- InterlockedExchangeAdd((long*)&mem, 0-subtrahend);
+inline uint32_t AtomicOperation::AtomicSub32(volatile uint32_t &mem, uint32_t subtrahend) {
+ return InterlockedExchangeAdd((long*)&mem, 0-subtrahend);
}
-inline void AtomicOperation::AtomicInc32(volatile uint32_t &mem) {
- AtomicAdd32(mem, 1);
+inline uint32_t AtomicOperation::AtomicInc32(volatile uint32_t &mem) {
+ return AtomicAdd32(mem, 1);
}
-inline void AtomicOperation::AtomicDec32(volatile uint32_t &mem) {
- AtomicSub32(mem, 1);
+inline uint32_t AtomicOperation::AtomicDec32(volatile uint32_t &mem) {
+ return AtomicSub32(mem, 1);
}
#endif
Modified: incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/util/SmartPointer.h
URL: http://svn.apache.org/viewvc/incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/util/SmartPointer.h?rev=1368526&r1=1368525&r2=1368526&view=diff
==============================================================================
--- incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/util/SmartPointer.h (original)
+++ incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/util/SmartPointer.h Thu Aug 2 15:19:23 2012
@@ -256,8 +256,8 @@ namespace capu {
inline
void SmartPointer<T>::decRefCount() {
if (mReferenceCount) {
- capu::AtomicOperation::AtomicDec32(*mReferenceCount);
- if (!(*mReferenceCount)) {
+ uint32_t oldValue = capu::AtomicOperation::AtomicDec32(*mReferenceCount);
+ if (--oldValue == 0) {
freeData();
}
}
Modified: incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/test/os/AtomicOperationTest.cpp
URL: http://svn.apache.org/viewvc/incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/test/os/AtomicOperationTest.cpp?rev=1368526&r1=1368525&r2=1368526&view=diff
==============================================================================
--- incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/test/os/AtomicOperationTest.cpp (original)
+++ incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/test/os/AtomicOperationTest.cpp Thu Aug 2 15:19:23 2012
@@ -24,24 +24,28 @@
TEST(AtomicOperation,Add) {
capu::uint32_t val = 100;
- capu::AtomicOperation::AtomicAdd32(val, 3);
+ capu::uint32_t ret = capu::AtomicOperation::AtomicAdd32(val, 3);
EXPECT_EQ((capu::uint32_t) 103,val);
+ EXPECT_EQ(ret, 100);
}
TEST(AtomicOperation,Sub) {
capu::uint32_t val = 13;
- capu::AtomicOperation::AtomicSub32(val, 5);
+ capu::uint32_t ret = capu::AtomicOperation::AtomicSub32(val, 5);
EXPECT_EQ((capu::uint32_t) 8,val);
+ EXPECT_EQ(ret, 13);
}
TEST(AtomicOperation,Inc) {
capu::uint32_t val = 1;
- capu::AtomicOperation::AtomicInc32(val);
+ capu::uint32_t ret = capu::AtomicOperation::AtomicInc32(val);
EXPECT_EQ((capu::uint32_t) 2,val);
+ EXPECT_EQ(ret, 1);
}
TEST(AtomicOperation,Dec) {
capu::uint32_t val = 3;
- capu::AtomicOperation::AtomicDec32(val);
+ capu::uint32_t ret = capu::AtomicOperation::AtomicDec32(val);
EXPECT_EQ((capu::uint32_t) 2,val);
+ EXPECT_EQ(ret, 3);
}
\ No newline at end of file
Modified: incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/test/os/arch/X86_32/AtomicOperation.inc
URL: http://svn.apache.org/viewvc/incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/test/os/arch/X86_32/AtomicOperation.inc?rev=1368526&r1=1368525&r2=1368526&view=diff
==============================================================================
--- incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/test/os/arch/X86_32/AtomicOperation.inc (original)
+++ incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/test/os/arch/X86_32/AtomicOperation.inc Thu Aug 2 15:19:23 2012
@@ -20,12 +20,14 @@
TEST(AtomicOperation, Add_Overflow_X86_32) {
capu::uint32_t val = 4294967295u;
- capu::AtomicOperation::AtomicAdd32(val, 3);
+ capu::uint32_t ret = capu::AtomicOperation::AtomicAdd32(val, 3);
EXPECT_EQ((capu::uint32_t) 2, val);
+ EXPECT_EQ(ret, 4294967295u);
}
TEST(AtomicOperation, Sub_Overflow_X86_32) {
capu::uint32_t val = 0;
- capu::AtomicOperation::AtomicSub32(val, 5);
+ capu::uint32_t ret = capu::AtomicOperation::AtomicSub32(val, 5);
EXPECT_EQ((capu::uint32_t) 4294967291u, val);
+ EXPECT_EQ(ret, 0u);
}
\ No newline at end of file
Modified: incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/test/os/arch/X86_64/AtomicOperation.inc
URL: http://svn.apache.org/viewvc/incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/test/os/arch/X86_64/AtomicOperation.inc?rev=1368526&r1=1368525&r2=1368526&view=diff
==============================================================================
--- incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/test/os/arch/X86_64/AtomicOperation.inc (original)
+++ incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/test/os/arch/X86_64/AtomicOperation.inc Thu Aug 2 15:19:23 2012
@@ -18,8 +18,9 @@
TEST(AtomicOperation,Add_NoOverflow_X86_64) {
capu::uint32_t val = 4294967295u;
- capu::AtomicOperation::AtomicAdd32(val, 3);
+ capu::uint32_t ret = capu::AtomicOperation::AtomicAdd32(val, 3);
EXPECT_EQ((capu::uint32_t) 4294967298u,val);
+ EXPECT_EQ(ret, 4294967295u);
}
//disabled until *64 methods are implemented