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
#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
\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
if (hr != WV_SUCCESS)\r
goto err2;\r
\r
- InterlockedIncrement(&nRef);\r
return WV_SUCCESS;\r
\r
err2:\r
\r
#include "rdma\winverbs.h"\r
\r
+extern volatile LONG WvRef;\r
+\r
class CWVProvider : IWVProvider\r
{\r
public:\r
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