X-Git-Url: https://git.openssl.org/gitweb/?a=blobdiff_plain;f=crypto%2Fthreads_win.c;h=4e0de908ee269510d8831c7110606722c50f8fe7;hb=418bb7b31bb7cfca6e419a5aa7bf161784f61059;hp=ff4aae4f32fdf2d2729aee850a55909556f851f0;hpb=aa6bb1352b1026b20a23b49da4efdcf171926eb0;p=openssl.git diff --git a/crypto/threads_win.c b/crypto/threads_win.c index ff4aae4f32..4e0de908ee 100644 --- a/crypto/threads_win.c +++ b/crypto/threads_win.c @@ -7,6 +7,10 @@ * https://www.openssl.org/source/license.html */ +#if defined(_WIN32) +# include +#endif + #include #if defined(OPENSSL_THREADS) && !defined(CRYPTO_TDEBUG) && defined(OPENSSL_SYS_WINDOWS) @@ -55,12 +59,14 @@ void CRYPTO_THREAD_lock_free(CRYPTO_RWLOCK *lock) return; } -# if _WIN32_WINNT < 0x0600 - # define ONCE_UNINITED 0 # define ONCE_ININIT 1 # define ONCE_DONE 2 +/* + * We don't use InitOnceExecuteOnce because that isn't available in WinXP which + * we still have to support. + */ int CRYPTO_THREAD_run_once(CRYPTO_ONCE *once, void (*init)(void)) { LONG volatile *lock = (LONG *)once; @@ -81,27 +87,6 @@ int CRYPTO_THREAD_run_once(CRYPTO_ONCE *once, void (*init)(void)) return (*lock == ONCE_DONE); } -# else - -BOOL CALLBACK once_cb(PINIT_ONCE once, PVOID p, PVOID *pp) -{ - void (*init)(void) = p; - - init(); - - return TRUE; -} - -int CRYPTO_THREAD_run_once(CRYPTO_ONCE *once, void (*init)(void)) -{ - if (InitOnceExecuteOnce(once, once_cb, init, NULL)) - return 1; - - return 0; -} - -# endif - int CRYPTO_THREAD_init_local(CRYPTO_THREAD_LOCAL *key, void (*cleanup)(void *)) { *key = TlsAlloc();