From 50250884afe55b1ee59c01f7e7b9fc17ebc1a0f6 Mon Sep 17 00:00:00 2001 From: shefty Date: Sat, 8 Mar 2008 02:17:30 +0000 Subject: [PATCH] wv/dll: fix reference count tracking on providers We need to decrement the DLL reference count whenever a provider is deleted. Signed-off-by: Sean Hefty git-svn-id: svn://openib.tc.cornell.edu/gen1@986 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86 --- branches/winverbs/core/winverbs/user/wv_main.cpp | 5 ++--- branches/winverbs/core/winverbs/user/wv_provider.h | 12 +++++++++++- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/branches/winverbs/core/winverbs/user/wv_main.cpp b/branches/winverbs/core/winverbs/user/wv_main.cpp index 70840961..a6aca9f9 100644 --- a/branches/winverbs/core/winverbs/user/wv_main.cpp +++ b/branches/winverbs/core/winverbs/user/wv_main.cpp @@ -30,7 +30,7 @@ #include "wv_base.h" #include "wv_provider.h" -static volatile LONG nRef; +volatile LONG WvRef; BOOLEAN WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) { @@ -43,7 +43,7 @@ BOOLEAN WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) STDAPI DllCanUnloadNow(void) { - return nRef ? S_FALSE : S_OK; + return WvRef ? S_FALSE : S_OK; } __declspec(dllexport) HRESULT WvGetObject(REFIID riid, LPVOID FAR* ppvObj) @@ -62,7 +62,6 @@ __declspec(dllexport) HRESULT WvGetObject(REFIID riid, LPVOID FAR* ppvObj) if (hr != WV_SUCCESS) goto err2; - InterlockedIncrement(&nRef); return WV_SUCCESS; err2: diff --git a/branches/winverbs/core/winverbs/user/wv_provider.h b/branches/winverbs/core/winverbs/user/wv_provider.h index 42d43449..24605b9b 100644 --- a/branches/winverbs/core/winverbs/user/wv_provider.h +++ b/branches/winverbs/core/winverbs/user/wv_provider.h @@ -34,6 +34,8 @@ #include "rdma\winverbs.h" +extern volatile LONG WvRef; + class CWVProvider : IWVProvider { public: @@ -54,7 +56,15 @@ public: STDMETHODIMP CreateListen(const struct sockaddr* pAddress, SIZE_T backlog, IWVListen** ppListen); - CWVProvider() {m_nRef = 0;} + CWVProvider() + { + m_nRef = 0; + InterlockedIncrement(&WvRef); + } + ~CWVProvider() + { + InterlockedDecrement(&WvRef); + } private: volatile LONG m_nRef; }; -- 2.41.0