summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbrianp <brianp@13f79535-47bb-0310-9956-ffa450edef68>2003-09-26 01:51:53 +0000
committerbrianp <brianp@13f79535-47bb-0310-9956-ffa450edef68>2003-09-26 01:51:53 +0000
commit14b3e992a9e70270fd63f0d09463aa7d64b960fc (patch)
treedd75c6cc2da51f9702492eac3a2082f14b457785
parent8ea8fc7dd220ea75941b6aeafb95020eec992c10 (diff)
downloadlibapr-14b3e992a9e70270fd63f0d09463aa7d64b960fc.tar.gz
Fix default impl of apr_atomic_xchg32, and add a test case for it
git-svn-id: http://svn.apache.org/repos/asf/apr/apr/trunk@64642 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--atomic/unix/apr_atomic.c2
-rw-r--r--test/testatomic.c13
2 files changed, 14 insertions, 1 deletions
diff --git a/atomic/unix/apr_atomic.c b/atomic/unix/apr_atomic.c
index 97bbb669d..16912b968 100644
--- a/atomic/unix/apr_atomic.c
+++ b/atomic/unix/apr_atomic.c
@@ -306,7 +306,7 @@ apr_uint32_t apr_atomic_xchg32(volatile apr_uint32_t *mem, apr_uint32_t val)
prev = *mem;
*mem = val;
apr_thread_mutex_unlock(lock);
- return val;
+ return prev;
}
return *mem;
#else
diff --git a/test/testatomic.c b/test/testatomic.c
index 6603b6517..2ad4a743b 100644
--- a/test/testatomic.c
+++ b/test/testatomic.c
@@ -184,6 +184,19 @@ static apr_status_t check_basic_atomics32(void)
}
printf("OK\n");
+ printf("%-60s", "testing apr_atomic_xchg32");
+ apr_atomic_set32(&y32, 100);
+ oldval = apr_atomic_xchg32(&y32, 50);
+ if (oldval != 100) {
+ fprintf(stderr, "Failed\noldval =%d should be 100\n", oldval);
+ return APR_EGENERAL;
+ }
+ if (y32 != 50) {
+ fprintf(stderr, "Failed\nnewval =%d should be 50\n", oldval);
+ return APR_EGENERAL;
+ }
+ printf("OK\n");
+
printf("%-60s", "testing apr_atomic_cas32");
oldval = apr_atomic_cas32(&casval, 12, 0);
if (oldval != 0) {