Count the number of provider instances to know when it's safe to unload the library.
Signed-off-by: Sean Hefty <[email protected]> --- trunk/ulp/netdirect2/user/nd_main.cpp | 3 ++- trunk/ulp/netdirect2/user/nd_provider.cpp | 5 +++++ 2 files changed, 7 insertions(+), 1 deletions(-) diff --git a/trunk/ulp/netdirect2/user/nd_main.cpp b/trunk/ulp/netdirect2/user/nd_main.cpp index 6fde5de..1b9e049 100644 --- a/trunk/ulp/netdirect2/user/nd_main.cpp +++ b/trunk/ulp/netdirect2/user/nd_main.cpp @@ -34,6 +34,7 @@ #include "nd_provider.h" HANDLE g_hHeap; +volatile LONG g_nRef; extern "C" { @@ -64,7 +65,7 @@ BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) STDAPI DllCanUnloadNow(void) { - return S_OK; + return (g_nRef == 0) ? S_OK : S_FALSE; } STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, void** ppv) diff --git a/trunk/ulp/netdirect2/user/nd_provider.cpp b/trunk/ulp/netdirect2/user/nd_provider.cpp index 6f94b71..cbc9c22 100644 --- a/trunk/ulp/netdirect2/user/nd_provider.cpp +++ b/trunk/ulp/netdirect2/user/nd_provider.cpp @@ -31,9 +31,13 @@ #include "nd_adapter.h" #include <ws2tcpip.h> +extern volatile LONG g_nRef; + + CNDProvider::CNDProvider() { m_pWvProvider = NULL; + InterlockedIncrement(&g_nRef); } STDMETHODIMP CNDProvider:: @@ -60,6 +64,7 @@ CNDProvider::~CNDProvider() if (m_pWvProvider) { m_pWvProvider->Release(); } + InterlockedDecrement(&m_gRef); } STDMETHODIMP CNDProvider:: _______________________________________________ ofw mailing list [email protected] http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ofw
