Author: cmihail Date: Tue Jun 28 07:29:28 2011 New Revision: 52485
URL: http://svn.reactos.org/svn/reactos?rev=52485&view=rev Log: [IP] - fix system crash when failing to connect to a remote host - Set address length in the TDI address struct - Simplify copying the address - Zero the sin_zero member
Modified: branches/GSoC_2011/TcpIpDriver/lib/drivers/ip/transport/datagram/datagram.c branches/GSoC_2011/TcpIpDriver/lib/drivers/ip/transport/tcp/event.c
Modified: branches/GSoC_2011/TcpIpDriver/lib/drivers/ip/transport/datagram/datagram.c URL: http://svn.reactos.org/svn/reactos/branches/GSoC_2011/TcpIpDriver/lib/driver... ============================================================================== --- branches/GSoC_2011/TcpIpDriver/lib/drivers/ip/transport/datagram/datagram.c [iso-8859-1] (original) +++ branches/GSoC_2011/TcpIpDriver/lib/drivers/ip/transport/datagram/datagram.c [iso-8859-1] Tue Jun 28 07:29:28 2011 @@ -135,15 +135,14 @@ RTAIPAddress = (PTA_IP_ADDRESS)Current->ReturnInfo->RemoteAddress; RTAIPAddress->TAAddressCount = 1; RTAIPAddress->Address->AddressType = TDI_ADDRESS_TYPE_IP; + RTAIPAddress->Address->AddressLength = TDI_ADDRESS_LENGTH_IP; RTAIPAddress->Address->Address->sin_port = SrcPort; + RTAIPAddress->Address->Address->in_addr = SrcAddress->Address.IPv4Address; + RtlZeroMemory(RTAIPAddress->Address->Address->sin_zero, 8);
TI_DbgPrint(MAX_TRACE, ("(A: %08x) Addr %08x Port %04x\n", RTAIPAddress, SrcAddress->Address.IPv4Address, SrcPort)); - - RtlCopyMemory( &RTAIPAddress->Address->Address->in_addr, - &SrcAddress->Address.IPv4Address, - sizeof(SrcAddress->Address.IPv4Address) );
ReferenceObject(AddrFile); UnlockObject(AddrFile, OldIrql);
Modified: branches/GSoC_2011/TcpIpDriver/lib/drivers/ip/transport/tcp/event.c URL: http://svn.reactos.org/svn/reactos/branches/GSoC_2011/TcpIpDriver/lib/driver... ============================================================================== --- branches/GSoC_2011/TcpIpDriver/lib/drivers/ip/transport/tcp/event.c [iso-8859-1] (original) +++ branches/GSoC_2011/TcpIpDriver/lib/drivers/ip/transport/tcp/event.c [iso-8859-1] Tue Jun 28 07:29:28 2011 @@ -77,7 +77,7 @@
ReferenceObject(Connection);
- DbgPrint("[IP, FlushAllQueues] Flushing recv/all with status: 0x%x\n", Status); + DbgPrint("[IP, FlushAllQueues] Flushing recv/all with status: 0x%x fox Connection = 0x%x\n", Status, Connection);
while ((Entry = ExInterlockedRemoveHeadList(&Connection->ReceiveRequest, &Connection->Lock))) { @@ -103,7 +103,7 @@ Bucket->Status = Status; Bucket->Information = 0;
- DbgPrint("[IP, FlushAllQueues] Flushing Listen request for Connection = 0x%x\n", Bucket->AssociatedEndpoint); + DbgPrint("[IP, FlushAllQueues] Completing Listen request for Connection = 0x%x\n", Bucket->AssociatedEndpoint);
DereferenceObject(Bucket->AssociatedEndpoint); CompleteBucket(Connection, Bucket, TRUE); @@ -129,22 +129,28 @@
Bucket->Status = Status; Bucket->Information = 0; + + DbgPrint("[IP, FlushAllQueues] Completing Connection request for Connection = 0x%x\n", Bucket->AssociatedEndpoint);
CompleteBucket(Connection, Bucket, TRUE); }
DereferenceObject(Connection); + + DbgPrint("[IP, FlushAllQueues] Leaving\n"); }
VOID TCPFinEventHandler(void *arg, err_t err) { PCONNECTION_ENDPOINT Connection = arg; - - FlushAllQueues(Connection, TCPTranslateError(err)); - + /* We're already closed so we don't want to call lwip_close */ Connection->SocketContext = NULL; + + DbgPrint("[IP, TCPFinEventHandler] Called for Connection( 0x%x )-> SocketContext = pcb (0x%x)\n", Connection, Connection->SocketContext); + + FlushAllQueues(Connection, TCPTranslateError(err)); }
VOID