From 212ac301ef74a63c88da8a4233af2173d8e36370 Mon Sep 17 00:00:00 2001 From: Jeff Trawick Date: Mon, 22 Oct 2007 11:08:52 +0000 Subject: implement apr_atomic_xchgptr() for z/OS Submitted by: David Jones reviewed by: trawick git-svn-id: https://svn.apache.org/repos/asf/apr/apr/trunk@587057 13f79535-47bb-0310-9956-ffa450edef68 --- atomic/os390/atomic.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'atomic') diff --git a/atomic/os390/atomic.c b/atomic/os390/atomic.c index 3c57668be..1d44ca3d1 100644 --- a/atomic/os390/atomic.c +++ b/atomic/os390/atomic.c @@ -118,3 +118,20 @@ apr_uint32_t apr_atomic_xchg32(volatile apr_uint32_t *mem, apr_uint32_t val) return old; } +APR_DECLARE(void*) apr_atomic_xchgptr(volatile void **mem_ptr, void *new_ptr) +{ + void *old_ptr; + + old_ptr = *(void **)mem_ptr; /* old is automatically updated on cs failure */ +#if APR_SIZEOF_VOIDP == 4 + do { + } while (__cs1(&old_ptr, mem_ptr, &new_ptr)); +#elif APR_SIZEOF_VOIDP == 8 + do { + } while (__csg(&old_ptr, mem_ptr, &new_ptr)); +#else +#error APR_SIZEOF_VOIDP value not supported +#endif /* APR_SIZEOF_VOIDP */ + + return old_ptr; +} -- cgit v1.2.1