Module: wine Branch: master Commit: 5c8aa89163fabc0496c96deeabd3775b2c9116cc URL: http://source.winehq.org/git/wine.git/?a=commit;h=5c8aa89163fabc0496c96deeab...
Author: Juan Lang juan.lang@gmail.com Date: Mon Jan 14 11:15:35 2008 -0800
crypt32: Fix race condition in loading default provider.
---
dlls/crypt32/main.c | 12 ++++++++++-- 1 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/dlls/crypt32/main.c b/dlls/crypt32/main.c index fa90ee0..922dd19 100644 --- a/dlls/crypt32/main.c +++ b/dlls/crypt32/main.c @@ -59,8 +59,16 @@ BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved) HCRYPTPROV CRYPT_GetDefaultProvider(void) { if (!hDefProv) - CryptAcquireContextW(&hDefProv, NULL, MS_ENHANCED_PROV_W, - PROV_RSA_FULL, CRYPT_VERIFYCONTEXT); + { + HCRYPTPROV prov; + + CryptAcquireContextW(&prov, NULL, MS_ENHANCED_PROV_W, PROV_RSA_FULL, + CRYPT_VERIFYCONTEXT); + InterlockedCompareExchangePointer((PVOID *)&hDefProv, (PVOID)prov, + NULL); + if (hDefProv != prov) + CryptReleaseContext(prov, 0); + } return hDefProv; }