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