From 0fb0d30bea28c35c7a1b51aae9be4bc93c03f1aa Mon Sep 17 00:00:00 2001 From: Ivan Zhakov Date: Tue, 12 Mar 2024 14:00:19 +0000 Subject: [PATCH] On 1.7.x-r1871447 branch: Merge r1866562 from trunk. git-svn-id: https://svn.apache.org/repos/asf/apr/apr/branches/1.7.x-r1871447@1916256 13f79535-47bb-0310-9956-ffa450edef68 --- include/arch/win32/apr_arch_misc.h | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/include/arch/win32/apr_arch_misc.h b/include/arch/win32/apr_arch_misc.h index 4dbe899c4c9..ccf0b9234db 100644 --- a/include/arch/win32/apr_arch_misc.h +++ b/include/arch/win32/apr_arch_misc.h @@ -199,13 +199,18 @@ 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 apr_winapi_fpt_##fn apr_winapi_pfn_##fn = NULL; \ - static int apr_winapi_chk_##fn = 0; \ - static APR_INLINE int apr_winapi_ld_##fn(void) \ + static INIT_ONCE apr_winapi_ctrl_##fn = {INIT_ONCE_STATIC_INIT}; \ + static BOOL WINAPI apr_winapi_init_once_##fn(PINIT_ONCE init_once,\ + PVOID baton, PVOID *context) \ + { \ + apr_winapi_pfn_##fn = (apr_winapi_fpt_##fn) \ + apr_load_dll_func(lib, #fn, ord); \ + return TRUE; \ + } \ +static APR_INLINE int apr_winapi_ld_##fn(void) \ { if (apr_winapi_pfn_##fn) return 1; \ - if (apr_winapi_chk_##fn ++) return 0; \ - if (!apr_winapi_pfn_##fn) \ - apr_winapi_pfn_##fn = (apr_winapi_fpt_##fn) \ - apr_load_dll_func(lib, #fn, ord); \ + InitOnceExecuteOnce(&apr_winapi_ctrl_##fn, apr_winapi_init_once_##fn, \ + NULL, NULL); \ if (apr_winapi_pfn_##fn) return 1; else return 0; }; \ static APR_INLINE rettype apr_winapi_##fn args \ { if (apr_winapi_ld_##fn()) \