+ 154;\r
return STATUS_SUCCESS;\r
}\r
+\r
+ if (DestIp == 11 * 256*256*256 + \r
+ 4 * 256*256 +\r
+ 8 * 256 +\r
+ + 152) {\r
+ *SrcIp = 11 * 256*256*256 + \r
+ 4 * 256*256 +\r
+ 8 * 256 +\r
+ + 151;\r
+ return STATUS_SUCCESS;\r
+ }\r
+\r
\r
ASSERT(FALSE);\r
*SrcIp = 0;\r
*SrcCaGuid = CL_NTOH64(0x2c9000100d050);\r
return STATUS_SUCCESS;\r
}\r
+\r
+ if (SourceAddr == 11 * 256*256*256 + \r
+ 4 * 256*256 +\r
+ 8 * 256 +\r
+ + 151) {\r
+\r
+ *SrcPortGuid = CL_NTOH64(0x2c9010a66d25a);//????? swlab63\r
+ *SrcCaGuid = CL_NTOH64(0x2c9010a66d259);\r
+ return STATUS_SUCCESS;\r
+ }\r
+ \r
+ if (SourceAddr == 11 * 256*256*256 + \r
+ 4 * 256*256 +\r
+ 8 * 256 +\r
+ + 152) {\r
+\r
+ *SrcPortGuid = CL_NTOH64(0x2c9010b29b661);//????? swlab63\r
+ *SrcCaGuid = CL_NTOH64(0x2c9010b29b660);\r
+ return STATUS_SUCCESS;\r
+ }\r
\r
ASSERT(FALSE);\r
*SrcPortGuid = 0;\r
\r
return STATUS_SUCCESS;\r
}\r
+\r
+ if (DestAddr == 11 * 256*256*256 + \r
+ 4 * 256*256 +\r
+ 8 * 256 +\r
+ + 152) {\r
+ *DestPortGuid = CL_NTOH64(0x2c9010b29b661);//????? swlab57\r
+ \r
+ return STATUS_SUCCESS;\r
+ }\r
\r
\r
ASSERT(FALSE);\r
SDP_PRINT(SDP_ERR, SDP_SOCKET, ("ib_cm_listen failed ib_status = 0x%d\n", ib_status ));\r
rc = IB2Status(ib_status);\r
pWspListenOut->Errno = IbalToWsaError( ib_status );\r
+ m_Lock.Unlock(); // Error ignored as this is already an error pass\r
goto Cleanup;\r
}\r
\r
NTSTATUS rc = STATUS_SUCCESS;\r
SDP_PRINT(SDP_TRACE, SDP_SOCKET, ("this = 0x%p state = %s \n",this, SS2String(m_state)));\r
OBJECT_ATTRIBUTES attr;\r
+ HANDLE ThreadHandle;\r
+\r
\r
if (!m_Lock.Lock()) {\r
SDP_PRINT(SDP_ERR, SDP_SOCKET, ("Failed to lock this = 0x%p \n",this));\r
m_Lock.Unlock(); // Error ignored as this is already an error pass\r
goto Cleanup;\r
}\r
-\r
- // We will now create a thread that will be resposible for the\r
- // destruction of this socket\r
- AddRef();\r
-\r
-\r
- /* Create a new thread, storing both the handle and thread id. */\r
- InitializeObjectAttributes( &attr, NULL, OBJ_KERNEL_HANDLE, NULL, NULL );\r
+ } else {\r
+ // Already set the event, so that the created thread won't have to wait\r
+ // for anything\r
+ KeSetEvent( &m_DisconectSentEvent, IO_NO_INCREMENT, FALSE );\r
+ }\r
\r
- HANDLE ThreadHandle;\r
- rc = PsCreateSystemThread(\r
- &ThreadHandle, \r
- THREAD_ALL_ACCESS,\r
- &attr,\r
- NULL,\r
- NULL,\r
- ::CloseSocketThread,\r
- this\r
- );\r
+ // We will now create a thread that will be resposible for the\r
+ // destruction of this socket\r
+ AddRef();\r
\r
- if (!NT_SUCCESS(rc)) {\r
- SDP_PRINT(SDP_ERR, SDP_SOCKET, ("PsCreateSystemThread failed rc = 0x%x\n", rc ));\r
- m_Lock.Unlock(); // Error ignored as this is already an error pass\r
- // The thread wasn't created so we should remove the refferance\r
- Release(); \r
- goto Cleanup;\r
- }\r
+ /* Create a new thread, storing both the handle and thread id. */\r
+ InitializeObjectAttributes( &attr, NULL, OBJ_KERNEL_HANDLE, NULL, NULL );\r
+ \r
+ rc = PsCreateSystemThread(\r
+ &ThreadHandle, \r
+ THREAD_ALL_ACCESS,\r
+ &attr,\r
+ NULL,\r
+ NULL,\r
+ ::CloseSocketThread,\r
+ this\r
+ );\r
\r
- ASSERT(m_pCloseSocketThread != NULL);\r
- // Convert the thread into a handle\r
- rc = ObReferenceObjectByHandle(\r
- ThreadHandle,\r
- THREAD_ALL_ACCESS,\r
- NULL,\r
- KernelMode,\r
- &m_pCloseSocketThread->ThreadObject,\r
- NULL\r
- );\r
- ASSERT(rc == STATUS_SUCCESS); // According to MSDN, if I set the params\r
- // correctly I shouldn't get an error\r
- \r
- rc = ZwClose(ThreadHandle);\r
- ASSERT(NT_SUCCESS(rc)); // Should always succeed\r
+ if (!NT_SUCCESS(rc)) {\r
+ SDP_PRINT(SDP_ERR, SDP_SOCKET, ("PsCreateSystemThread failed rc = 0x%x\n", rc ));\r
+ m_Lock.Unlock(); // Error ignored as this is already an error pass\r
+ // The thread wasn't created so we should remove the refferance\r
+ Release(); \r
+ goto Cleanup;\r
+ }\r
\r
- g_pSdpDriver->AddThread(m_pCloseSocketThread);\r
- m_pCloseSocketThread = NULL; // Will be delated when the callback thread is deleted\r
+ ASSERT(m_pCloseSocketThread != NULL);\r
+ // Convert the thread into a handle\r
+ rc = ObReferenceObjectByHandle(\r
+ ThreadHandle,\r
+ THREAD_ALL_ACCESS,\r
+ NULL,\r
+ KernelMode,\r
+ &m_pCloseSocketThread->ThreadObject,\r
+ NULL\r
+ );\r
+ ASSERT(rc == STATUS_SUCCESS); // According to MSDN, must succeed if I set the params\r
+ \r
+ rc = ZwClose(ThreadHandle);\r
+ ASSERT(NT_SUCCESS(rc)); // Should always succeed\r
\r
- }\r
+ g_pSdpDriver->AddThread(m_pCloseSocketThread);\r
+ m_pCloseSocketThread = NULL; // Will be delated when the callback thread is deleted\r
\r
rc = m_Lock.Unlock();\r
if (rc == STATUS_SHUTDOWN_IN_PROGRESS) {\r
NTSTATUS rc = STATUS_SUCCESS;\r
ib_cm_drep_t cm_drep;\r
ib_api_status_t ib_status;\r
+ bool Locked;\r
\r
\r
// Take the lock and verify the state\r
- rc = m_Lock.Lock();\r
- if (!NT_SUCCESS(rc)) {\r
+ Locked = m_Lock.Lock();\r
+ // BUGBUG: It seems that even when the lock fails we should send\r
+ // drep\r
+ if (!Locked) {\r
SDP_PRINT(SDP_ERR, SDP_SOCKET, ("m_Lock.Lock failed rc = 0x%x\n", rc ));\r
goto Cleanup;\r
}\r
\r
Cleanup:\r
\r
-/*\r
- if (pSocket != NULL) {\r
- pSocket->Release();\r
- }\r
-*/ \r
// Who should take care of the errors that were found here (if found)????????\r
return;\r
\r