]> git.openfabrics.org - ~shefty/rdma-win.git/commitdiff
winverbs/nd: allow retrying ND:Connect()
authorSean Hefty <sean.hefty@intel.com>
Tue, 9 Mar 2010 00:59:27 +0000 (16:59 -0800)
committerSean Hefty <sean.hefty@intel.com>
Tue, 9 Mar 2010 01:13:45 +0000 (17:13 -0800)
The ND documentation specifies that ND:Connect() should be retryable.
Add this support to the winverbs ND provider.

Signed-off-by: Sean Hefty <sean.hefty@intel.com>
trunk/ulp/netdirect/user/nd_connect.cpp
trunk/ulp/netdirect/user/nd_connect.h

index 81d5f7bd09bf742bec3380027aaebdce0a705a59..26524d36d2f057293895da5fe6a559fabc2a9d99 100644 (file)
@@ -37,15 +37,26 @@ CNDConnector::CNDConnector(CNDAdapter *pAdapter)
        pAdapter->AddRef();\r
        m_pAdapter = pAdapter;\r
        m_pWvConnEp = NULL;\r
+       m_Connects = 0;\r
 }\r
 \r
 STDMETHODIMP CNDConnector::\r
 Init(void)\r
 {\r
+       IWVConnectEndpoint *ep;\r
        HRESULT hr;\r
 \r
-       hr = m_pAdapter->m_pWvProvider->CreateConnectEndpoint(&m_pWvConnEp);\r
-       return NDConvertWVStatus(hr);\r
+       hr = m_pAdapter->m_pWvProvider->CreateConnectEndpoint(&ep);\r
+       if (FAILED(hr)) {\r
+               return NDConvertWVStatus(hr);\r
+       }\r
+\r
+       if (m_pWvConnEp != NULL) {\r
+               m_pWvConnEp->Release();\r
+               m_pWvConnEp = ep;\r
+       }\r
+\r
+       return ND_SUCCESS;\r
 }\r
 \r
 CNDConnector::~CNDConnector()\r
@@ -132,6 +143,13 @@ Connect(INDEndpoint* pEndpoint,
        IBAT_PATH_BLOB path;\r
        HRESULT hr;\r
 \r
+       if (m_Connects++ > 0) {\r
+               hr = Init();\r
+               if (FAILED(hr)) {\r
+                       goto out;\r
+               }\r
+       }\r
+\r
        RtlCopyMemory(&addr, &m_pAdapter->m_Address, AddressLength);\r
        if (addr.Sa.sa_family == AF_INET) {\r
                addr.Sin.sin_port = LocalPort;\r
index 2da2f2223a82c71589eb6123e12a611a190c156e..688fedc7d678db846146538c0c1a1ee16fc0e9a8 100644 (file)
@@ -114,6 +114,7 @@ public:
 \r
 protected:\r
        STDMETHODIMP            Init();\r
+       int                                     m_Connects;\r
 };\r
 \r
 #endif // _ND_CONNECTOR_H_\r