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;
 }

Attachment: dllmain.diff
Description: Binary data

_______________________________________________
ofw mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ofw

Reply via email to