diff --git a/lib/hcrypto/rand-w32.c b/lib/hcrypto/rand-w32.c index 4bb21c938..49f52b18c 100644 --- a/lib/hcrypto/rand-w32.c +++ b/lib/hcrypto/rand-w32.c @@ -43,16 +43,16 @@ #include "randi.h" -volatile static HCRYPTPROV g_cryptprovider = 0; +volatile static HCRYPTPROV g_cryptprovider = NULL; static HCRYPTPROV _hc_CryptProvider(void) { BOOL rv; - HCRYPTPROV cryptprovider = 0; + HCRYPTPROV cryptprovider = NULL; - if (g_cryptprovider != 0) - return g_cryptprovider; + if (g_cryptprovider != NULL) + goto out; rv = CryptAcquireContext(&cryptprovider, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, @@ -82,15 +82,15 @@ _hc_CryptProvider(void) CRYPT_VERIFYCONTEXT); } - if (rv && + if (rv == 0 && InterlockedCompareExchangePointer((PVOID *) &g_cryptprovider, - (PVOID) cryptprovider, 0) != 0) { + (PVOID) cryptprovider, NULL) != 0) { CryptReleaseContext(cryptprovider, 0); - cryptprovider = g_cryptprovider; } - return cryptprovider; +out: + return g_cryptprovider; } /*