]> git.openfabrics.org - ~shefty/rdma-win.git/commitdiff
merge from branch (rev-652)
authortzachid <tzachid@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Mon, 21 Nov 2005 12:31:12 +0000 (12:31 +0000)
committertzachid <tzachid@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Mon, 21 Nov 2005 12:31:12 +0000 (12:31 +0000)
Added GetSockName and GetPeerName.
Usermode API's are printed in DEBUG.
Fix a BUG in multiple  connect.
Fix a leak of buffers. (Rev 700)

git-svn-id: svn://openib.tc.cornell.edu/gen1@182 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86

trunk/ulp/sdp/include/SdpShared.h
trunk/ulp/sdp/kernel/SdpArp.h
trunk/ulp/sdp/kernel/SdpConnectionList.cpp
trunk/ulp/sdp/kernel/SdpDriver.cpp
trunk/ulp/sdp/kernel/SdpGenUtils.h
trunk/ulp/sdp/kernel/SdpLock.h
trunk/ulp/sdp/kernel/SdpRecvPool.cpp
trunk/ulp/sdp/kernel/SdpSocket.cpp
trunk/ulp/sdp/kernel/SdpSocket.h
trunk/ulp/sdp/kernel/SdpTrace.cpp
trunk/ulp/sdp/todo

index 36215b5532cca95a8fd6966035b7a137ba94ef80..85c044797635eb436c4df0606636c59dbd495eba 100644 (file)
@@ -18,7 +18,8 @@
 #define IOCTL_WSP_BIND          CTL_CODE(FILE_DEVICE_UNKNOWN, 0x805, METHOD_BUFFERED ,FILE_ANY_ACCESS)\r
 #define IOCTL_WSP_LISTEN        CTL_CODE(FILE_DEVICE_UNKNOWN, 0x806, METHOD_BUFFERED ,FILE_ANY_ACCESS)\r
 #define IOCTL_WSP_ACCEPT        CTL_CODE(FILE_DEVICE_UNKNOWN, 0x807, METHOD_BUFFERED ,FILE_ANY_ACCESS)\r
-#define IOCTL_WSP_CLOSE_SOCKET  CTL_CODE(FILE_DEVICE_UNKNOWN, 0x808, METHOD_BUFFERED ,FILE_ANY_ACCESS)\r
+#define IOCTL_WSP_GET_XXX_NAME  CTL_CODE(FILE_DEVICE_UNKNOWN, 0x808, METHOD_BUFFERED ,FILE_ANY_ACCESS)\r
+#define IOCTL_WSP_CLOSE_SOCKET  CTL_CODE(FILE_DEVICE_UNKNOWN, 0x809, METHOD_BUFFERED ,FILE_ANY_ACCESS)\r
 \r
 \r
 // Data structures that are used for connect\r
@@ -101,6 +102,17 @@ struct WspAcceptOut {
     USHORT Port;    \r
 };\r
 \r
+struct WspGetSockXXIn {\r
+    VOID *pSocket;\r
+    bool LocaleAddress; // Tells if this is used as GetSockName or GetPeerName   \r
+};\r
+\r
+struct WspGetSockXXOut {\r
+    int Errno;\r
+    ULONG IP;\r
+    USHORT Port;    \r
+};\r
+\r
 struct WspSocketCloseIn {\r
     VOID *pSocket;    \r
 };\r
index 6737b86772669ba5b6cf2175dea19e53522d2528..4b59ca8bd085b3cca2bc6f1a799456a7ffb1fbf6 100644 (file)
@@ -33,10 +33,9 @@ public:
         OUT USHORT *SrcPort\r
         )\r
     {\r
-        ASSERT(SourceAddr != 0);\r
         // If the port is 0, choose your own free port.\r
         // If the port is not 0 check if this port is already in use\r
-        *SrcPort = 5050;\r
+        *SrcPort = 5050; // BUGBUG: Complete this mechanism\r
         return STATUS_SUCCESS;\r
 \r
     }\r
index a56c714a00b5a87703ce314982100691a4518859..e6284bc43493367617a69ae61dd656fe1a4eff01 100644 (file)
@@ -90,12 +90,13 @@ ConnectionList::VerifyConnictionInReplySent(SdpSocket *pNewSocket)
     SdpSocket *pSocket = NULL;\r
 #if DBG\r
     LIST_ENTRY *item = m_ReplySentConnections.Head();\r
-    while (item->Flink != m_ReplySentConnections.Head()) {\r
+    for (int i = 0 ; i < m_ReplySentConnections.Size(); i++) {\r
         pSocket = CONTAINING_RECORD(item, SdpSocket , m_ListeningSocketList);\r
         if (pSocket == pNewSocket) {\r
             // We have found what we were looking for\r
             return STATUS_SUCCESS;\r
         }\r
+        item = item->Flink;\r
     }\r
     // Not found, return error\r
     ASSERT(FALSE);\r
index 207c760f3585beb1348e4b96e0fdbdde9ab94446..25b179eaa779b104829831b28bfbf05f4822ee9d 100644 (file)
@@ -525,7 +525,7 @@ SdpDriver::DispatchDeviceIoControl(
             }\r
             rc = pSdpSocket->WSPListen(&wspListenIn, pWspListenOut);\r
             if (!NT_SUCCESS(rc)) {\r
-                SDP_PRINT(SDP_ERR, SDP_DRIVER, ("pSdpSocket->WSPRecv failed rc = 0x%x\n", rc ));        \r
+                SDP_PRINT(SDP_ERR, SDP_DRIVER, ("pSdpSocket->WSPListen failed rc = 0x%x\n", rc ));        \r
                 goto Cleanup;\r
             }\r
         }\r
@@ -566,6 +566,32 @@ SdpDriver::DispatchDeviceIoControl(
         }\r
         break;\r
 \r
+        case IOCTL_WSP_GET_XXX_NAME:\r
+        {\r
+            SDP_PRINT(SDP_TRACE, SDP_DRIVER, ("IOCTL_WSP_GET_XXX_NAME recieved\n" ));   \r
+            VERIFY_BUFFERS(InputBufferLength, OutputBufferLength, WspGetSockXXIn, WspGetSockXXOut);\r
+            OutputDataSize = sizeof (WspGetSockXXOut);\r
+\r
+            // get the socket based on the users pointer\r
+            WspGetSockXXIn wspGetSockXXin = *(WspGetSockXXIn *) pInputBuffer;\r
+            WspGetSockXXOut *pWspGetSockXXOut = (WspGetSockXXOut *) pOutputBuffer;\r
+            pSdpUserFile = (SdpUserFile *)pIrpSp->FileObject->FsContext;\r
+            pSdpSocket = pSdpUserFile->SocketByPointer(wspGetSockXXin.pSocket);\r
+            if (pSdpSocket == NULL) {\r
+               SDP_PRINT(SDP_DEBUG, SDP_DRIVER, ("IOCTL_WSP_GET_XXX_NAME socket %x not found\n", wspGetSockXXin.pSocket));   \r
+               // This is a well defined winsock error\r
+               pWspGetSockXXOut->Errno = WSAENOTSOCK;\r
+               goto Cleanup;\r
+            }\r
+            rc = pSdpSocket->WSPGetXXXName(&wspGetSockXXin, pWspGetSockXXOut);\r
+            if (!NT_SUCCESS(rc)) {\r
+                SDP_PRINT(SDP_ERR, SDP_DRIVER, ("pSdpSocket->WSPGetXXXName failed rc = 0x%x\n", rc ));        \r
+                goto Cleanup;\r
+            }\r
+        }\r
+        break;\r
+        \r
+\r
         case IOCTL_WSP_CLOSE_SOCKET :\r
         {\r
             SDP_PRINT(SDP_TRACE, SDP_DRIVER, ("IOCTL_WSP_CLOSE_SOCKET recieved\n" ));   \r
index 53356d1f54f24bf1eaccc47b7c76403ef84c61c5..8f55e1ec887fc6885d54372895e6aedf650513ba 100644 (file)
@@ -6,6 +6,7 @@
 \r
 #define GLOBAL_ALLOCATION_TAG ' pdS'\r
 #define SEND_BUFFERS_ALLOCATION_TAG 'SpdS'\r
+#define RECV_BUFFERS_ALLOCATION_TAG 'RpdS'\r
 \r
 \r
 class CSpinLockWrapper {\r
index af447de84132f082f09cc88d55093b5f3c2735c0..82d27b51bea94570b01db811a87066c451f9dad3 100644 (file)
@@ -152,6 +152,12 @@ Cleanup:
         return Locked;\r
     }\r
 \r
+    // This is the first stage in moving the lock to return rc (and later void)\r
+    NTSTATUS LockRc() {\r
+        if (Lock()) return STATUS_SUCCESS;\r
+        return STATUS_SHUTDOWN_IN_PROGRESS;\r
+    }\r
+\r
     /*\r
         Frees the lock and handle any events that might happen there.\r
         Please note that the lock is freed no metter what the error code is.\r
@@ -169,6 +175,7 @@ Cleanup:
             ASSERT(m_InUse);\r
             ASSERT(KeGetCurrentIrql() == PASSIVE_LEVEL);\r
             KeAcquireSpinLock(&m_SpinLock, &OldIrql);\r
+            ASSERT(m_InUse); // Also with the lock taken\r
             OldFlags = m_flags;\r
             ResetFlags(m_flags);\r
             if (!SomethingToHandle(OldFlags)) {\r
index eafa0a3d12d5edd6dba42139b3131177e9ac9bbe..a51eb95553d090dce47c114c964f751859ad2e0c 100644 (file)
@@ -44,15 +44,29 @@ RecvPool::Init(
     NTSTATUS rc = STATUS_SUCCESS;\r
     \r
     for (int i=0;i < MAX_RECV_PACKETS; i++) {\r
-        rc = BufferDescriptor::AllocateBuffer(&pBufferDescriptor, m_MaxMessageSize, SEND_BUFFERS_ALLOCATION_TAG);\r
-        ASSERT(NT_SUCCESS(rc));\r
+        rc = BufferDescriptor::AllocateBuffer(&pBufferDescriptor, m_MaxMessageSize, RECV_BUFFERS_ALLOCATION_TAG);\r
+        if (!NT_SUCCESS(rc)) {\r
+            SDP_PRINT(SDP_ERR, SDP_BUFFER_POOL, ("BufferDescriptor::AllocateBuffer failed rc=0x%x \n", rc));\r
+            goto Cleanup;\r
+        }\r
+\r
         m_CurrentlyAllocated++;\r
     \r
         pBufferDescriptor->Reset();\r
         m_FreePackets.InsertTailList(&pBufferDescriptor->BuffersList);\r
     }\r
-        \r
-    return STATUS_SUCCESS;\r
+Cleanup:\r
+    if (!NT_SUCCESS(rc)) {\r
+        LIST_ENTRY *item = NULL;\r
+        while (m_FreePackets.Size() > 0 ) {\r
+            item = m_FreePackets.RemoveHeadList();\r
+            pBufferDescriptor = CONTAINING_RECORD(item, BufferDescriptor , BuffersList);\r
+            BufferDescriptor::DeAllocateBuffer(pBufferDescriptor, RECV_BUFFERS_ALLOCATION_TAG);\r
+        }\r
+\r
+    }\r
+   \r
+    return rc;\r
 }\r
 \r
 /*\r
@@ -301,7 +315,7 @@ RecvPool::ReceiveIfCan()
             pBufferDescriptor = CONTAINING_RECORD(item, BufferDescriptor , BuffersList);            \r
         } else if (m_CurrentlyAllocated < m_MaxBuffers) {\r
             // We can allocate more buffers\r
-            rc = BufferDescriptor::AllocateBuffer(&pBufferDescriptor, m_MaxMessageSize, SEND_BUFFERS_ALLOCATION_TAG);\r
+            rc = BufferDescriptor::AllocateBuffer(&pBufferDescriptor, m_MaxMessageSize, RECV_BUFFERS_ALLOCATION_TAG);\r
             if (!NT_SUCCESS(rc)) {\r
                 SDP_PRINT(SDP_ERR, SDP_BUFFER_POOL, ("AllocateBuffer failed rc = 0x%x\n", rc ));\r
                 goto Cleanup;\r
@@ -352,13 +366,13 @@ RecvPool::ShutDown()
     while (m_FreePackets.Size() > 0 ) {\r
         item = m_FreePackets.RemoveHeadList();\r
         pBufferDescriptor = CONTAINING_RECORD(item, BufferDescriptor , BuffersList);\r
-        BufferDescriptor::DeAllocateBuffer(pBufferDescriptor, SEND_BUFFERS_ALLOCATION_TAG);\r
+        BufferDescriptor::DeAllocateBuffer(pBufferDescriptor, RECV_BUFFERS_ALLOCATION_TAG);\r
     }\r
 \r
     while (m_FullPackets.Size() > 0 ) {\r
         item = m_FullPackets.RemoveHeadList();\r
         pBufferDescriptor = CONTAINING_RECORD(item, BufferDescriptor , BuffersList);\r
-        BufferDescriptor::DeAllocateBuffer(pBufferDescriptor, SEND_BUFFERS_ALLOCATION_TAG);\r
+        BufferDescriptor::DeAllocateBuffer(pBufferDescriptor, RECV_BUFFERS_ALLOCATION_TAG);\r
     }\r
 }\r
 \r
index 0c373d0fad3566c552501330c877aa82e7d43155..54a7d742e3d8eddd2380cdc762d1d5bfe9f350d0 100644 (file)
@@ -303,6 +303,7 @@ Cleanup:
     } else {\r
         // Make sure that we have the error setted\r
         ASSERT(pWspSendOut->Errno != 0); // BUGBUG: Need to make sure that this\r
+        SDP_PRINT(SDP_WARN, SDP_SOCKET, ("this = 0x%p rc = 0x%x\n",this, rc));\r
         // is indeed the case.\r
     }\r
     return rc;\r
@@ -941,6 +942,54 @@ Cleanup:
     return rc;\r
 }\r
 \r
+NTSTATUS \r
+SdpSocket::WSPGetXXXName(\r
+    WspGetSockXXIn    *pWspGetSockXXIn,\r
+    WspGetSockXXOut   *pWspGetSockXXOut\r
+    )\r
+{\r
+    NTSTATUS rc = STATUS_SUCCESS;\r
+    ib_api_status_t ib_status;\r
+\r
+    SDP_PRINT(SDP_TRACE, SDP_SOCKET, ("this = 0x%p \n",this));\r
+    rc = m_Lock.LockRc();\r
+    if (!NT_SUCCESS(rc)) {        \r
+        SDP_PRINT(SDP_ERR, SDP_SOCKET, ("Failed to lock this = 0x%p \n",this));\r
+        pWspGetSockXXOut->Errno = WSAENETDOWN;\r
+        goto Cleanup;\r
+    }\r
+    pWspGetSockXXOut->Errno = 0;\r
+    if(pWspGetSockXXIn->LocaleAddress) {\r
+        // This is the WSPGetSockName\r
+        pWspGetSockXXOut->IP = m_SrcIp;\r
+        pWspGetSockXXOut->Port = m_SrcPort;        \r
+    } else {\r
+        // This is the WSPGetPeerName\r
+        pWspGetSockXXOut->IP = m_DstIp;\r
+        pWspGetSockXXOut->Port = m_DstPort;        \r
+    }\r
+    rc = m_Lock.Unlock();\r
+    if (!NT_SUCCESS(rc)) {\r
+        SDP_PRINT(SDP_ERR, SDP_SOCKET, ("m_Lock.Unlock() failed rc = 0x%x\n", rc ));\r
+        pWspGetSockXXOut->Errno = WSAENETDOWN;        \r
+        goto Cleanup;\r
+    }\r
+    \r
+Cleanup:    \r
+    if (NT_SUCCESS(rc) ) {\r
+        pWspGetSockXXOut->Errno = 0;\r
+    } else {\r
+        // Make sure that we have the error setted\r
+        ASSERT(pWspGetSockXXOut->Errno != 0);\r
+        // is indeed the case.\r
+    }\r
+    return rc;\r
+\r
+\r
+}\r
+\r
+\r
+\r
 /*\r
     CloseSocket is probably one of the most complicated winsock APIs.\r
     Our current implmentation will be the default implmentation always. \r
@@ -1260,7 +1309,7 @@ NTSTATUS SdpSocket::CmSendRTU()
 \r
     // We now start the recieve processing\r
 \r
-    rc = m_Lock.Lock(); //??????????\r
+    rc = m_Lock.LockRc();\r
     if (!NT_SUCCESS(rc)) {\r
         SDP_PRINT(SDP_ERR, SDP_SOCKET, ("m_Lock.Lock failed rc = 0x%x\n", rc ));\r
         goto Cleanup;\r
@@ -1303,6 +1352,7 @@ VOID
 SdpSocket::CmReqCallback(IN   ib_cm_req_rec_t *p_cm_req_rec)\r
 {\r
     SDP_PRINT(SDP_TRACE, SDP_SOCKET, ("this = 0x%p\n", this));\r
+\r
     NTSTATUS rc = STATUS_SUCCESS;\r
     ASSERT(KeGetCurrentIrql() == PASSIVE_LEVEL);\r
     net64_t SrcCaGuid;\r
@@ -1319,7 +1369,7 @@ SdpSocket::CmReqCallback(IN   ib_cm_req_rec_t *p_cm_req_rec)
     }\r
 \r
     // Take the lock and verify the state\r
-    rc = m_Lock.Lock(); //???????\r
+    rc = m_Lock.LockRc();\r
     if (!NT_SUCCESS(rc)) {\r
         SDP_PRINT(SDP_ERR, SDP_SOCKET, ("m_Lock.Lock failed rc = 0x%x\n", rc ));\r
         goto Cleanup;\r
@@ -1341,7 +1391,7 @@ SdpSocket::CmReqCallback(IN   ib_cm_req_rec_t *p_cm_req_rec)
     // Create a new socket for this request\r
     pNewSocket = new SdpSocket;\r
     if (pNewSocket == NULL) {\r
-        SDP_PRINT(SDP_ERR, SDP_SOCKET, ("pNewSocket failed\n"));        \r
+        SDP_PRINT(SDP_ERR, SDP_SOCKET, ("new pNewSocket failed\n"));        \r
         goto ErrorLocked;\r
     }\r
 \r
@@ -1506,7 +1556,7 @@ SdpSocket::CmReqCallback(IN   ib_cm_req_rec_t *p_cm_req_rec)
         goto ErrorLocked;\r
     }\r
 \r
-    rc = pNewSocket->m_Lock.Lock(); //????????\r
+    rc = pNewSocket->m_Lock.LockRc();\r
     if (!NT_SUCCESS(rc)) {\r
         SDP_PRINT(SDP_ERR, SDP_SOCKET, ("pNewSocket.Init() failed rc = 0x%x\n", rc ));\r
         goto ErrorLocked;\r
@@ -1552,9 +1602,12 @@ SdpSocket::CmReqCallback(IN   ib_cm_req_rec_t *p_cm_req_rec)
     }    \r
 \r
 Cleanup:\r
+    if (!NT_SUCCESS(rc)) {\r
+        // BUGBUG: We need to send a rej here\r
+    }\r
     if (pNewSocket != NULL) {\r
         pNewSocket->Release();\r
-    }\r
+    }    \r
     return;\r
 \r
 ErrorLocked:\r
@@ -1584,7 +1637,7 @@ SdpSocket::CmRtuCallback(IN   ib_cm_rtu_rec_t *p_cm_rtu_rec)
 \r
 \r
     // Take the lock and verify the state\r
-    rc = m_Lock.Lock(); //?????\r
+    rc = m_Lock.LockRc();\r
     if (!NT_SUCCESS(rc)) {\r
         SDP_PRINT(SDP_ERR, SDP_SOCKET, ("m_Lock.Lock failed rc = 0x%x\n", rc ));\r
         goto Cleanup;\r
@@ -1606,7 +1659,7 @@ SdpSocket::CmRtuCallback(IN   ib_cm_rtu_rec_t *p_cm_rtu_rec)
     }\r
 \r
     // Next step is to move the new socket to the SS_CONNECTED state\r
-    rc = pSocket->m_Lock.Lock(); //???????\r
+    rc = pSocket->m_Lock.LockRc();\r
     if (!NT_SUCCESS(rc)) {\r
         SDP_PRINT(SDP_ERR, SDP_SOCKET, ("m_Lock.Lock failed rc = 0x%x\n", rc ));\r
         goto ErrorLocked;\r
@@ -1731,6 +1784,8 @@ SdpSocket::__recv_cb1(
     IN  const   ib_cq_handle_t  h_cq,\r
     IN  void *cq_context )\r
 {\r
+   SDP_PRINT(SDP_ALL, SDP_SOCKET, ("__recv_cb1\n"));\r
+\r
     SdpSocket *pSocket = (SdpSocket *) cq_context;\r
     pSocket->m_Lock.SignalCB(RECV_CB_CALLED);\r
 }\r
@@ -1770,11 +1825,11 @@ SdpSocket::recv_cb()
         ASSERT (ib_status == IB_SUCCESS);\r
         ib_wc_t     *p_wc;\r
         for( p_wc = p_wc1; p_wc; p_wc = p_wc->p_next ) {\r
-            ASSERT( p_wc->status == IB_WCS_SUCCESS || p_wc->status == IB_WCS_WR_FLUSHED_ERR);\r
+            ASSERT( p_wc->status == IB_WCS_SUCCESS || p_wc->status == IB_WCS_WR_FLUSHED_ERR); // BUGBUG: Can there be  other errors here ???\r
             if (p_wc->status == IB_WCS_WR_FLUSHED_ERR) {\r
                 // We have an error, but we still need to return the packet to the caller\r
                 pBufferDescriptor = (BufferDescriptor *)p_wc->wr_id;\r
-                SDP_PRINT(SDP_ERR, SDP_SOCKET, ("p_wc->status == IB_WCS_WR_FLUSHED_ERR \n" ));\r
+                SDP_PRINT(SDP_DEBUG, SDP_SOCKET, ("p_wc->status == IB_WCS_WR_FLUSHED_ERR \n" ));\r
                 // we can not handle it, but we can and should return it to the pool of recieved buffers\r
                 rc1 = m_RecvBufferPool.RecievedBuffer(pBufferDescriptor, true);\r
                 ASSERT(rc1 == STATUS_SUCCESS); // return with error can not fail\r
@@ -2280,6 +2335,7 @@ VOID SdpSocket::Shutdown()
     SDP_PRINT(SDP_TRACE, SDP_SOCKET, ("called this = 0x%p\n", this));   \r
     NTSTATUS rc = STATUS_SUCCESS;\r
     ib_api_status_t     ib_status;\r
+    ib_qp_mod_t         qp_mod;\r
 \r
 \r
     if (m_ShutdownCalled) {\r
@@ -2317,10 +2373,23 @@ VOID SdpSocket::Shutdown()
     }\r
 \r
     m_ConnectionList.Shutdown();\r
+\r
     \r
-    SDP_PRINT(SDP_TRACE, SDP_SOCKET, ("111111\n", this));   \r
+    SDP_PRINT(SDP_TRACE, SDP_SOCKET, ("111111\n", this));\r
 \r
     if (m_qp != NULL) {\r
+\r
+        SDP_PRINT(SDP_TRACE, SDP_SOCKET, ("222222\n", this));\r
+\r
+        cl_memclr( &qp_mod, sizeof(ib_qp_mod_t) );\r
+        qp_mod.req_state = IB_QPS_ERROR;\r
+        ib_status = ib_modify_qp( m_qp, &qp_mod );\r
+        if( ib_status != IB_SUCCESS ) {\r
+            SDP_PRINT(SDP_ERR, SDP_SOCKET, ("ib_modify_qp failed ib_status = 0x%d\n", ib_status ));\r
+            ASSERT(FALSE);\r
+            // We are probably going to leak, but we have to continue\r
+        }\r
+        \r
         ib_status = ib_destroy_qp(m_qp, ShutdownCB);\r
         //m_qp = NULL;\r
         if(ib_status == IB_SUCCESS) {\r
@@ -2333,8 +2402,8 @@ VOID SdpSocket::Shutdown()
         }\r
     }\r
 \r
-    SDP_PRINT(SDP_TRACE, SDP_SOCKET, ("22222\n", this));   \r
-\r
+    SDP_PRINT(SDP_TRACE, SDP_SOCKET, ("333333\n", this));\r
+    \r
     if (m_scq != NULL) {\r
         ib_status = ib_destroy_cq(m_scq, ShutdownCB);\r
         //???ASSERT(ib_status == IB_SUCCESS);\r
@@ -2343,7 +2412,7 @@ VOID SdpSocket::Shutdown()
         }\r
         //?????m_scq = NULL;\r
     }\r
-    SDP_PRINT(SDP_TRACE, SDP_SOCKET, ("33333\n", this));   \r
+    SDP_PRINT(SDP_TRACE, SDP_SOCKET, ("444444\n", this));   \r
 \r
     if (m_rcq != NULL) {\r
         ib_status = ib_destroy_cq(m_rcq, ShutdownCB); \r
@@ -2354,7 +2423,7 @@ VOID SdpSocket::Shutdown()
         //??????m_rcq = NULL;\r
 \r
     }\r
-    SDP_PRINT(SDP_TRACE, SDP_SOCKET, ("44444\n", this));   \r
+    SDP_PRINT(SDP_TRACE, SDP_SOCKET, ("555555\n", this));   \r
     if (m_pd != NULL) {\r
         ib_status = ib_dealloc_pd(m_pd, ShutdownCB); \r
         //???ASSERT(ib_status == IB_SUCCESS);\r
@@ -2364,7 +2433,7 @@ VOID SdpSocket::Shutdown()
         //?????m_pd = NULL;\r
         \r
     }\r
-    SDP_PRINT(SDP_TRACE, SDP_SOCKET, ("55555\n", this));   \r
+    SDP_PRINT(SDP_TRACE, SDP_SOCKET, ("666666\n", this));   \r
 \r
     if (mh_Ca != NULL) {\r
         ib_status = ib_close_ca(mh_Ca, ShutdownCB); \r
index 15c5c9cec394700e4a7ffc5f3940cf16581218f0..e424f67db0bd613dcfac2990dc2b86a3bc68ab27 100644 (file)
@@ -139,6 +139,10 @@ public:
     \r
     SdpSocket();\r
 \r
+    ~SdpSocket() {\r
+        SDP_PRINT(SDP_TRACE, SDP_SOCKET, ("this = 0x%p\n", this));\r
+    }\r
+\r
     NTSTATUS Init(\r
         WspSocketIn     *pSocketInParam, \r
         WspSocketOut    *pSocketOutParam\r
@@ -172,7 +176,12 @@ public:
     NTSTATUS WSPAccept(\r
         WspAcceptIn    *pWspAcceptIn,\r
         WspAcceptOut   *pWspAcceptOut\r
-        );    \r
+        );\r
+\r
+    NTSTATUS WSPGetXXXName(\r
+        WspGetSockXXIn    *pWspGetSockXXIn,\r
+        WspGetSockXXOut   *pWspGetSockXXOut\r
+        );\r
     \r
     NTSTATUS WSPCloseSocket(\r
         WspSocketCloseIn    *pWspSocketCloseIn,\r
index bd7da2abc0c146b4234a8624d5473312eb95ad1d..d2a19556fb994458f39909a79d6a68bd03fb553b 100644 (file)
@@ -4,8 +4,8 @@
 #include "Precompile.h"\r
 \r
 //int g_SdpDbgLevel = SDP_WARN;\r
-//int g_SdpDbgLevel = SDP_TRACE;\r
-int g_SdpDbgLevel = SDP_DEBUG;\r
+int g_SdpDbgLevel = SDP_TRACE;\r
+//int g_SdpDbgLevel = SDP_DEBUG;\r
 \r
 BOOLEAN CheckCondition(int sev, int top, char *file, int line, char * func)\r
 {\r
index 2d455f72dd2c7cd0663dad4bf3d1165f83c08c62..d44cafce561ae205cd76e69accf833ab7d4de8e3 100644 (file)
@@ -29,7 +29,9 @@ general:
        Find a better solution for threading and remove the current solution.\r
        Fix the race of sdp user file\r
 \r
-       Fix the lock implmentation to have also a void implmentation as well as an RC implmentation\r
+       Fix the lock implmentation to have also a void implmentation as well as an RC implmentation.\r
+\r
+       Check the ArpCache problems (on a native windows machine) and decide what to do.\r
        \r
 \r
 USER MODE:\r