The Endpoint class takes a QP parameter for Connect, Accept, and
Disconnect.  To simplify the interface, store the QP internally and
remove it from the Disconnect call.  Also allow it to be optional
for Accept on the active side of the connection.

Signed-off-by: Sean Hefty <[email protected]>
---
As long as the main winverbs interface is changing, squeeze in a couple of
other nice to have API fix-ups before an official release.

diff -up -r -X \mshefty\scm\winof\trunk\docs\dontdiff.txt -I '\$Id:' 
trunk\core\winverbs/user/wv_ep.cpp
branches\winverbs\core\winverbs/user/wv_ep.cpp
--- trunk\core\winverbs/user/wv_ep.cpp  2009-05-27 12:11:06.650750000 -0700
+++ branches\winverbs\core\winverbs/user/wv_ep.cpp      2009-06-10 
10:50:43.760399800 -0700
@@ -75,6 +75,10 @@ CWVConnectEndpoint::~CWVConnectEndpoint(
 {
        DWORD   bytes;
 
+       if (m_pQp != NULL) {
+               m_pQp->Release();
+       }
+
        if (m_Id != 0) {
                WvDeviceIoControl(m_hFile, WV_IOCTL_EP_DESTROY, &m_Id, sizeof 
m_Id,
                                                  NULL, 0, &bytes, NULL);
@@ -293,8 +297,10 @@ Connect(IWVConnectQueuePair* pQp, const 
        DWORD                           bytes;
        HRESULT                         hr;
 
+       m_pQp = (CWVConnectQueuePair *) pQp;
+       m_pQp->AddRef();
        attr.Id = m_Id;
-       attr.QpId = ((CWVConnectQueuePair *) pQp)->m_Id;
+       attr.QpId = m_pQp->m_Id;
 
        if (pAddress->sa_family == AF_INET) {
                RtlCopyMemory(&attr.PeerAddress, pAddress, sizeof(SOCKADDR_IN));
@@ -316,16 +322,20 @@ Connect(IWVConnectQueuePair* pQp, const 
 STDMETHODIMP CWVConnectEndpoint::
 Accept(IWVConnectQueuePair* pQp, WV_CONNECT_PARAM* pParam, OVERLAPPED* 
pOverlapped)
 {
-       CWVConnectQueuePair     *qp = (CWVConnectQueuePair *) pQp;
        WV_IO_EP_ACCEPT         attr;
        DWORD                           bytes;
        HRESULT                         hr;
        void                            *pout;
        DWORD                           size;
 
+       if (m_pQp == NULL) {
+               m_pQp = (CWVConnectQueuePair *) pQp;
+               m_pQp->AddRef();
+       }
+
        attr.Id = m_Id;
-       attr.QpId = qp->m_Id;
-       qp->m_pVerbs->nd_modify_qp(qp->m_hVerbsQp, &pout, &size);
+       attr.QpId = m_pQp->m_Id;
+       m_pQp->m_pVerbs->nd_modify_qp(m_pQp->m_hVerbsQp, &pout, &size);
        WvIoConvertConnParam(&attr.Param, pParam);
 
        if (WvDeviceIoControl(m_hFile, WV_IOCTL_EP_ACCEPT, &attr, sizeof attr,
@@ -339,9 +349,8 @@ Accept(IWVConnectQueuePair* pQp, WV_CONN
 }
 
 STDMETHODIMP CWVConnectEndpoint::
-Disconnect(IWVConnectQueuePair* pQp, OVERLAPPED* pOverlapped)
+Disconnect(OVERLAPPED* pOverlapped)
 {
-       CWVConnectQueuePair     *qp = (CWVConnectQueuePair *) pQp;
        WV_IO_EP_DISCONNECT     attr;
        DWORD                           bytes;
        HRESULT                         hr;
@@ -349,14 +358,8 @@ Disconnect(IWVConnectQueuePair* pQp, OVE
        DWORD                           size;
 
        attr.Id = m_Id;
-       if (pQp != NULL) {
-               attr.QpId = qp->m_Id;
-               qp->m_pVerbs->nd_modify_qp(qp->m_hVerbsQp, &pout, &size);
-       } else {
-               attr.QpId = 0;
-               pout = NULL;
-               size = 0;
-       }
+       attr.QpId = m_pQp->m_Id;
+       m_pQp->m_pVerbs->nd_modify_qp(m_pQp->m_hVerbsQp, &pout, &size);
 
        if (WvDeviceIoControl(m_hFile, WV_IOCTL_EP_DISCONNECT,
                                                  &attr, sizeof attr, pout, 
size, &bytes, pOverlapped)) {
diff -up -r -X \mshefty\scm\winof\trunk\docs\dontdiff.txt -I '\$Id:' 
trunk\core\winverbs/user/wv_ep.h
branches\winverbs\core\winverbs/user/wv_ep.h
--- trunk\core\winverbs/user/wv_ep.h    2009-05-27 12:11:06.869500000 -0700
+++ branches\winverbs\core\winverbs/user/wv_ep.h        2009-06-10 
10:52:51.464414400 -0700
@@ -35,6 +35,7 @@
 #include <rdma\winverbs.h>
 #include "wv_provider.h"
 #include "wv_base.h"
+#include "wv_qp.h"
 
 class CWVConnectEndpoint : IWVConnectEndpoint, public CWVBase
 {
@@ -61,7 +62,7 @@ public:
                                                 WV_CONNECT_PARAM* pParam, 
OVERLAPPED* pOverlapped);
        STDMETHODIMP Accept(IWVConnectQueuePair* pQp, WV_CONNECT_PARAM* pParam,
                                                OVERLAPPED* pOverlapped);
-       STDMETHODIMP Disconnect(IWVConnectQueuePair* pQp, OVERLAPPED* 
pOverlapped);
+       STDMETHODIMP Disconnect(OVERLAPPED* pOverlapped);
        STDMETHODIMP NotifyDisconnect(OVERLAPPED* pOverlapped);
        STDMETHODIMP Query(WV_CONNECT_ATTRIBUTES* pAttributes);
 
@@ -103,7 +104,8 @@ public:
        CWVProvider             *m_pProvider;
 
 protected:
-       SOCKET                  m_Socket;
+       SOCKET                          m_Socket;
+       CWVConnectQueuePair     *m_pQp;
 
        STDMETHODIMP Allocate();
 };
diff -up -r -X \mshefty\scm\winof\trunk\docs\dontdiff.txt -I '\$Id:' 
trunk\inc\user\rdma/winverbs.h
branches\winverbs\inc\user\rdma/winverbs.h
--- trunk\inc\user\rdma/winverbs.h      2009-06-02 13:23:44.246541100 -0700
+++ branches\winverbs\inc\user\rdma/winverbs.h  2009-06-10 10:57:41.621791200 
-0700
@@ -1156,9 +1168,9 @@ DECLARE_INTERFACE_(IWVEndpoint, IWVOverl
 
 #undef INTERFACE
 #define INTERFACE IWVConnectEndpoint
-// {B7C6708E-EA9C-4cff-B2CF-35BCA9A3739A}
-DEFINE_GUID(IID_IWVConnectEndpoint, 0xb7c6708e, 0xea9c, 0x4cff,
-                       0xb2, 0xcf, 0x35, 0xbc, 0xa9, 0xa3, 0x73, 0x9a);
+// {8FDA0EE7-E7F7-48cc-83D3-17E9C871FEA3}
+DEFINE_GUID(IID_IWVConnectEndpoint, 0x8fda0ee7, 0xe7f7, 0x48cc,
+                       0x83, 0xd3, 0x17, 0xe9, 0xc8, 0x71, 0xfe, 0xa3);
 
 DECLARE_INTERFACE_(IWVConnectEndpoint, IWVEndpoint)
 {
@@ -1230,14 +1242,13 @@ DECLARE_INTERFACE_(IWVConnectEndpoint, I
 
        STDMETHOD(Accept)(
                THIS_
-               __in IWVConnectQueuePair* pQp,
+               __in_opt IWVConnectQueuePair* pQp,
                __in WV_CONNECT_PARAM* pParam,
                __in_opt OVERLAPPED* pOverlapped
                ) PURE;
 
        STDMETHOD(Disconnect)(
                THIS_
-               __in_opt IWVConnectQueuePair* pQp,
                __in_opt OVERLAPPED* pOverlapped
                ) PURE;
 


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

Reply via email to