summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYann Ylavic <ylavic@apache.org>2023-02-15 13:07:41 +0000
committerYann Ylavic <ylavic@apache.org>2023-02-15 13:07:41 +0000
commit85e9cd32af0ed5ccd34c914cf5a3f8f7c72708da (patch)
tree0467535567f8f3b36bcbcdf51f456214220e6aca
parentff8a0da8f6944629eaef0d2030ac473fdace8a0b (diff)
downloadapr-85e9cd32af0ed5ccd34c914cf5a3f8f7c72708da.tar.gz
atomic64: Generic apr_atomic_read64() to always use a lock.
Don't play games with sizeof(void*) to determine whether a raw load intruction is atomic or not. Systems that fall back to the generic implementation are not eligible for the compiler builtins or CPU native atomic intructions already, and we don't want to reimplement that here (e.g. alignment, ordering guarantees, ...). * atomic/unix/mutex64.c(apr_atomic_read64): No #ifdefery, always take the lock. git-svn-id: https://svn.apache.org/repos/asf/apr/apr/trunk@1907678 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--atomic/unix/mutex64.c12
1 files changed, 0 insertions, 12 deletions
diff --git a/atomic/unix/mutex64.c b/atomic/unix/mutex64.c
index 9f1f1df6d..a6a7ceb0b 100644
--- a/atomic/unix/mutex64.c
+++ b/atomic/unix/mutex64.c
@@ -96,17 +96,6 @@ apr_status_t apr__atomic_generic64_init(apr_pool_t *p)
APR_DECLARE(apr_uint64_t) apr_atomic_read64(volatile apr_uint64_t *mem)
{
- /* On 32bit CPUs this loads with two instructions (tearing),
- * so a lock is needed to ensure atomicity.
- *
- * APR_SIZEOF_VOIDP is probably not the right check for 32 vs 64 bits CPUs
- * but it spares an (hardly-)exhaustive list of supported CPUs (and using
- * assembly). If APR_SIZEOF_VOIDP==4 means that the compiler generates
- * 32bit instructions (-m32 or whatever) then it's the right check though.
- */
-#if APR_SIZEOF_VOIDP >= 8
- return *mem;
-#else
apr_uint64_t cur_value;
DECLARE_MUTEX_LOCKED(mutex, mem);
@@ -115,7 +104,6 @@ APR_DECLARE(apr_uint64_t) apr_atomic_read64(volatile apr_uint64_t *mem)
MUTEX_UNLOCK(mutex);
return cur_value;
-#endif
}
APR_DECLARE(void) apr_atomic_set64(volatile apr_uint64_t *mem, apr_uint64_t val)