The ND documentation specifies that ND:Connect() should be retry-able.
Add this support to the winverbs ND provider.

Signed-off-by: Sean Hefty <[email protected]>
---
change from v1:
fixed issue where server side of ND tests could crash

 trunk/ulp/netdirect/user/nd_connect.cpp |   22 ++++++++++++++++++++--
 trunk/ulp/netdirect/user/nd_connect.h   |    1 +
 2 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/trunk/ulp/netdirect/user/nd_connect.cpp 
b/trunk/ulp/netdirect/user/nd_connect.cpp
index 81d5f7b..3042530 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 2da2f22..688fedc 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_


_______________________________________________
ofw mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ofw

Reply via email to