From: Sean Hefty Date: Tue, 9 Mar 2010 00:59:27 +0000 (-0800) Subject: winverbs/nd: allow retrying ND:Connect() X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=1d4eba779bfd5097cc08d4bb4ba917ba9abffe36;p=~shefty%2Frdma-win.git winverbs/nd: allow retrying ND:Connect() The ND documentation specifies that ND:Connect() should be retryable. Allow Connect() to be retried. Signed-off-by: Sean Hefty --- diff --git a/trunk/ulp/netdirect/user/nd_connect.cpp b/trunk/ulp/netdirect/user/nd_connect.cpp index 81d5f7bd..26524d36 100644 --- a/trunk/ulp/netdirect/user/nd_connect.cpp +++ b/trunk/ulp/netdirect/user/nd_connect.cpp @@ -37,15 +37,26 @@ CNDConnector::CNDConnector(CNDAdapter *pAdapter) pAdapter->AddRef(); m_pAdapter = pAdapter; m_pWvConnEp = NULL; + m_Connects = 0; } STDMETHODIMP CNDConnector:: Init(void) { + IWVConnectEndpoint *ep; HRESULT hr; - hr = m_pAdapter->m_pWvProvider->CreateConnectEndpoint(&m_pWvConnEp); - return NDConvertWVStatus(hr); + hr = m_pAdapter->m_pWvProvider->CreateConnectEndpoint(&ep); + if (FAILED(hr)) { + return NDConvertWVStatus(hr); + } + + if (m_pWvConnEp != NULL) { + m_pWvConnEp->Release(); + m_pWvConnEp = ep; + } + + return ND_SUCCESS; } CNDConnector::~CNDConnector() @@ -132,6 +143,13 @@ Connect(INDEndpoint* pEndpoint, IBAT_PATH_BLOB path; HRESULT hr; + if (m_Connects++ > 0) { + hr = Init(); + if (FAILED(hr)) { + goto out; + } + } + RtlCopyMemory(&addr, &m_pAdapter->m_Address, AddressLength); if (addr.Sa.sa_family == AF_INET) { addr.Sin.sin_port = LocalPort; diff --git a/trunk/ulp/netdirect/user/nd_connect.h b/trunk/ulp/netdirect/user/nd_connect.h index 2da2f222..688fedc7 100644 --- a/trunk/ulp/netdirect/user/nd_connect.h +++ b/trunk/ulp/netdirect/user/nd_connect.h @@ -114,6 +114,7 @@ public: protected: STDMETHODIMP Init(); + int m_Connects; }; #endif // _ND_CONNECTOR_H_