]> git.openfabrics.org - ~shefty/rdma-win.git/commitdiff
wv/dll: fix reference count tracking on providers
authorshefty <shefty@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Sat, 8 Mar 2008 02:17:30 +0000 (02:17 +0000)
committershefty <shefty@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Sat, 8 Mar 2008 02:17:30 +0000 (02:17 +0000)
We need to decrement the DLL reference count whenever a provider is deleted.

Signed-off-by: Sean Hefty <sean.hefty@intel.com>
git-svn-id: svn://openib.tc.cornell.edu/gen1@986 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86

branches/winverbs/core/winverbs/user/wv_main.cpp
branches/winverbs/core/winverbs/user/wv_provider.h

index 70840961d46f406f70758e7cec6db8a0ddc502f5..a6aca9f942787cba954ed2f7cfa3fc5374bc1ca7 100644 (file)
@@ -30,7 +30,7 @@
 #include "wv_base.h"\r
 #include "wv_provider.h"\r
 \r
-static volatile LONG nRef;\r
+volatile LONG WvRef;\r
 \r
 BOOLEAN WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)\r
 {\r
@@ -43,7 +43,7 @@ BOOLEAN WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
 \r
 STDAPI DllCanUnloadNow(void)\r
 {\r
-       return nRef ? S_FALSE : S_OK;\r
+       return WvRef ? S_FALSE : S_OK;\r
 }\r
 \r
 __declspec(dllexport) HRESULT WvGetObject(REFIID riid, LPVOID FAR* ppvObj)\r
@@ -62,7 +62,6 @@ __declspec(dllexport) HRESULT WvGetObject(REFIID riid, LPVOID FAR* ppvObj)
        if (hr != WV_SUCCESS)\r
                goto err2;\r
 \r
-       InterlockedIncrement(&nRef);\r
        return WV_SUCCESS;\r
 \r
 err2:\r
index 42d43449d87cda7e9fa1ccdb93c921552a657c2b..24605b9b779d9f4c0627ba9d46587c2a82b32f18 100644 (file)
@@ -34,6 +34,8 @@
 \r
 #include "rdma\winverbs.h"\r
 \r
+extern volatile LONG WvRef;\r
+\r
 class CWVProvider : IWVProvider\r
 {\r
 public:\r
@@ -54,7 +56,15 @@ public:
        STDMETHODIMP CreateListen(const struct sockaddr* pAddress,\r
                                                          SIZE_T backlog, IWVListen** ppListen);\r
 \r
-       CWVProvider() {m_nRef = 0;}\r
+       CWVProvider()\r
+       {\r
+               m_nRef = 0;\r
+               InterlockedIncrement(&WvRef);\r
+       }\r
+       ~CWVProvider()\r
+       {\r
+               InterlockedDecrement(&WvRef);\r
+       }\r
 private:\r
        volatile LONG m_nRef;\r
 };\r