summaryrefslogtreecommitdiff
path: root/include/arch
diff options
context:
space:
mode:
authorIvan Zhakov <ivan@apache.org>2019-12-23 12:29:44 +0000
committerIvan Zhakov <ivan@apache.org>2019-12-23 12:29:44 +0000
commit1d70414ef32decfd37b256b18fe486370cd7cbc4 (patch)
tree3fe3a8b3dd12c4a6e225a623bae2cc66512b71f7 /include/arch
parentc90021a5071ba646356fb1509a0cdff7416653b4 (diff)
downloadapr-1d70414ef32decfd37b256b18fe486370cd7cbc4.tar.gz
Follow-up to r1871447.
* include/arch/win32/apr_arch_misc.h (APR_DECLARE_LATE_DLL_FUNC): Use direct memory write instead of InterlockedExchangePointer() since pointer-sized writes are atomic on Windows. git-svn-id: https://svn.apache.org/repos/asf/apr/apr/trunk@1871925 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'include/arch')
-rw-r--r--include/arch/win32/apr_arch_misc.h7
1 files changed, 4 insertions, 3 deletions
diff --git a/include/arch/win32/apr_arch_misc.h b/include/arch/win32/apr_arch_misc.h
index 387ea79f5..78f0dfa82 100644
--- a/include/arch/win32/apr_arch_misc.h
+++ b/include/arch/win32/apr_arch_misc.h
@@ -201,13 +201,14 @@ FARPROC apr_load_dll_func(apr_dlltoken_e fnLib, char *fnName, int ordinal);
*/
#define APR_DECLARE_LATE_DLL_FUNC(lib, rettype, calltype, fn, ord, args, names) \
typedef rettype (calltype *apr_winapi_fpt_##fn) args; \
- static volatile apr_winapi_fpt_##fn apr_winapi_pfn_##fn = (PVOID) (ULONG_PTR) (-1); \
+ static volatile apr_winapi_fpt_##fn apr_winapi_pfn_##fn = (apr_winapi_fpt_##fn) (ULONG_PTR) (-1); \
static APR_INLINE int apr_winapi_ld_##fn(void) \
{ \
apr_winapi_fpt_##fn cached_func = apr_winapi_pfn_##fn; \
- if (cached_func == (PVOID) (ULONG_PTR) (-1)) { \
+ if (cached_func == (apr_winapi_fpt_##fn) (ULONG_PTR) (-1)) { \
cached_func = (apr_winapi_fpt_##fn) apr_load_dll_func(lib, #fn, ord); \
- InterlockedExchangePointer(&((PVOID)apr_winapi_pfn_##fn), cached_func); \
+ /* Pointer-sized writes are atomic on Windows. */ \
+ apr_winapi_pfn_##fn = cached_func; \
} \
if (cached_func) return 1; else return 0; }; \
static APR_INLINE rettype apr_winapi_##fn args \