From d36a9a6632fec82c5441a05048b7b688b3e8498d Mon Sep 17 00:00:00 2001 From: Stan Smith Date: Wed, 10 Mar 2010 22:24:02 +0000 Subject: [PATCH] [WINVERBS/ND] allow retrying ND:Connect() The ND documentation specifies that ND:Connect() should be retry-able. Add this support to the winverbs ND provider. Signed-off-by: Sean Hefty git-svn-id: svn://openib.tc.cornell.edu/gen1@2729 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86 --- .../WOF2-2/ulp/netdirect/user/nd_connect.cpp | 22 +++++++++++++++++-- .../WOF2-2/ulp/netdirect/user/nd_connect.h | 1 + 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/branches/WOF2-2/ulp/netdirect/user/nd_connect.cpp b/branches/WOF2-2/ulp/netdirect/user/nd_connect.cpp index 81d5f7bd..3042530d 100644 --- a/branches/WOF2-2/ulp/netdirect/user/nd_connect.cpp +++ b/branches/WOF2-2/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/branches/WOF2-2/ulp/netdirect/user/nd_connect.h b/branches/WOF2-2/ulp/netdirect/user/nd_connect.h index 2da2f222..688fedc7 100644 --- a/branches/WOF2-2/ulp/netdirect/user/nd_connect.h +++ b/branches/WOF2-2/ulp/netdirect/user/nd_connect.h @@ -114,6 +114,7 @@ public: protected: STDMETHODIMP Init(); + int m_Connects; }; #endif // _ND_CONNECTOR_H_ -- 2.41.0