DllMain is called multiple times for a given process. Prevent double initialization of critical sections by only initializing it during process attach. This avoids corrupting the critical section while it may be in use.
Signed-off-by: Sean Hefty <[email protected]> --- This should go into winof 2.1 Index: ulp/libibverbs/src/ibv_main.cpp =================================================================== --- ulp/libibverbs/src/ibv_main.cpp (revision 2373) +++ ulp/libibverbs/src/ibv_main.cpp (working copy) @@ -34,9 +34,18 @@ BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) { UNREFERENCED_PARAMETER(hInstance); - UNREFERENCED_PARAMETER(dwReason); UNREFERENCED_PARAMETER(lpReserved); - InitializeCriticalSection(&lock); + switch (dwReason) { + case DLL_PROCESS_ATTACH: + InitializeCriticalSection(&lock); + break; + case DLL_PROCESS_DETACH: + DeleteCriticalSection(&lock); + break; + default: + break; + } + return TRUE; } Index: ulp/librdmacm/src/cma_main.cpp =================================================================== --- ulp/librdmacm/src/cma_main.cpp (revision 2373) +++ ulp/librdmacm/src/cma_main.cpp (working copy) @@ -35,10 +35,18 @@ BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) { UNREFERENCED_PARAMETER(hInstance); - UNREFERENCED_PARAMETER(dwReason); UNREFERENCED_PARAMETER(lpReserved); - InitializeCriticalSection(&lock); + switch (dwReason) { + case DLL_PROCESS_ATTACH: + InitializeCriticalSection(&lock); + break; + case DLL_PROCESS_DETACH: + DeleteCriticalSection(&lock); + break; + default: + break; + } return TRUE; }
dllmain.diff
Description: Binary data
_______________________________________________ ofw mailing list [email protected] http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ofw
