From afe9844e8bdde1bbb41ac432d01b013b9268ce0b Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Fri, 6 Mar 2009 20:32:17 +0000 Subject: [PATCH] - Merge aicom-network-fixes up to r39293 svn path=/trunk/; revision=39896 --- reactos/drivers/network/afd/afd/listen.c | 23 +++++++++++-------- reactos/drivers/network/afd/afd/select.c | 4 +--- reactos/drivers/network/lan/lan/routines.c | 10 ++++---- reactos/drivers/network/tcpip/include/irp.h | 6 ----- reactos/drivers/network/tcpip/tcpip/buffer.c | 1 - .../drivers/network/tcpip/tcpip/dispatch.c | 11 +++++---- reactos/drivers/network/tcpip/tcpip/irp.c | 6 +---- reactos/drivers/network/tcpip/tcpip/main.c | 8 +++---- .../drivers/network/tcpip/tcpip/mockbuffer.c | 1 - reactos/lib/drivers/ip/network/memtrack.c | 15 ++++-------- reactos/lib/drivers/ip/network/neighbor.c | 2 +- 11 files changed, 34 insertions(+), 53 deletions(-) diff --git a/reactos/drivers/network/afd/afd/listen.c b/reactos/drivers/network/afd/afd/listen.c index 725d77fae58..144fa1cbf55 100644 --- a/reactos/drivers/network/afd/afd/listen.c +++ b/reactos/drivers/network/afd/afd/listen.c @@ -12,17 +12,15 @@ #include "tdiconn.h" #include "debug.h" -static VOID SatisfyAccept( PAFD_DEVICE_EXTENSION DeviceExt, +static NTSTATUS SatisfyAccept( PAFD_DEVICE_EXTENSION DeviceExt, PIRP Irp, PFILE_OBJECT NewFileObject, PAFD_TDI_OBJECT_QELT Qelt ) { PAFD_FCB FCB = NewFileObject->FsContext; NTSTATUS Status; - if( !SocketAcquireStateLock( FCB ) ) { - LostSocket( Irp ); - return; - } + if( !SocketAcquireStateLock( FCB ) ) + return LostSocket( Irp ); /* Transfer the connection to the new socket, launch the opening read */ AFD_DbgPrint(MID_TRACE,("Completing a real accept (FCB %x)\n", FCB)); @@ -50,9 +48,11 @@ static VOID SatisfyAccept( PAFD_DEVICE_EXTENSION DeviceExt, IoCompleteRequest( Irp, IO_NETWORK_INCREMENT ); SocketStateUnlock( FCB ); + + return Status; } -static VOID SatisfyPreAccept( PIRP Irp, PAFD_TDI_OBJECT_QELT Qelt ) { +static NTSTATUS SatisfyPreAccept( PIRP Irp, PAFD_TDI_OBJECT_QELT Qelt ) { PAFD_RECEIVED_ACCEPT_DATA ListenReceive = (PAFD_RECEIVED_ACCEPT_DATA)Irp->AssociatedIrp.SystemBuffer; PTA_IP_ADDRESS IPAddr; @@ -74,6 +74,7 @@ static VOID SatisfyPreAccept( PIRP Irp, PAFD_TDI_OBJECT_QELT Qelt ) { Irp->IoStatus.Status = STATUS_NO_MEMORY; Irp->IoStatus.Information = 0; IoCompleteRequest( Irp, IO_NETWORK_INCREMENT ); + return STATUS_NO_MEMORY; } AFD_DbgPrint(MID_TRACE,("IPAddr->TAAddressCount %d\n", @@ -92,6 +93,7 @@ static VOID SatisfyPreAccept( PIRP Irp, PAFD_TDI_OBJECT_QELT Qelt ) { Irp->IoStatus.Information = ((PCHAR)&IPAddr[1]) - ((PCHAR)ListenReceive); Irp->IoStatus.Status = STATUS_SUCCESS; IoCompleteRequest( Irp, IO_NETWORK_INCREMENT ); + return STATUS_SUCCESS; } static NTSTATUS NTAPI ListenComplete @@ -244,6 +246,7 @@ NTSTATUS AfdWaitForListen( PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp ) { PFILE_OBJECT FileObject = IrpSp->FileObject; PAFD_FCB FCB = FileObject->FsContext; + NTSTATUS Status; AFD_DbgPrint(MID_TRACE,("Called\n")); @@ -253,7 +256,7 @@ NTSTATUS AfdWaitForListen( PDEVICE_OBJECT DeviceObject, PIRP Irp, PLIST_ENTRY PendingConn = FCB->PendingConnections.Flink; /* We have a pending connection ... complete this irp right away */ - SatisfyPreAccept + Status = SatisfyPreAccept ( Irp, CONTAINING_RECORD ( PendingConn, AFD_TDI_OBJECT_QELT, ListEntry ) ); @@ -264,7 +267,7 @@ NTSTATUS AfdWaitForListen( PDEVICE_OBJECT DeviceObject, PIRP Irp, PollReeval( FCB->DeviceExt, FCB->FileObject ); SocketStateUnlock( FCB ); - return Irp->IoStatus.Status; + return Status; } else { AFD_DbgPrint(MID_TRACE,("Holding\n")); @@ -341,7 +344,7 @@ NTSTATUS AfdAccept( PDEVICE_OBJECT DeviceObject, PIRP Irp, ASSERT(NewFileObject->FsContext != FCB); /* We have a pending connection ... complete this irp right away */ - SatisfyAccept( DeviceExt, Irp, NewFileObject, PendingConnObj ); + Status = SatisfyAccept( DeviceExt, Irp, NewFileObject, PendingConnObj ); ObDereferenceObject( NewFileObject ); @@ -355,7 +358,7 @@ NTSTATUS AfdAccept( PDEVICE_OBJECT DeviceObject, PIRP Irp, } SocketStateUnlock( FCB ); - return Irp->IoStatus.Status; + return Status; } } diff --git a/reactos/drivers/network/afd/afd/select.c b/reactos/drivers/network/afd/afd/select.c index dec6e3567f4..c1eee875c37 100644 --- a/reactos/drivers/network/afd/afd/select.c +++ b/reactos/drivers/network/afd/afd/select.c @@ -181,7 +181,7 @@ AfdSelect( PDEVICE_OBJECT DeviceObject, PIRP Irp, Irp->IoStatus.Status = STATUS_NO_MEMORY; Irp->IoStatus.Information = 0; IoCompleteRequest( Irp, IO_NETWORK_INCREMENT ); - return Irp->IoStatus.Status; + return STATUS_NO_MEMORY; } if( Exclusive ) { @@ -263,8 +263,6 @@ AfdSelect( PDEVICE_OBJECT DeviceObject, PIRP Irp, AFD_DbgPrint(MID_TRACE,("Returning %x\n", Status)); - Irp->IoStatus.Status = Status; - return Status; } diff --git a/reactos/drivers/network/lan/lan/routines.c b/reactos/drivers/network/lan/lan/routines.c index 03d57cf98ba..4d5acf8318f 100644 --- a/reactos/drivers/network/lan/lan/routines.c +++ b/reactos/drivers/network/lan/lan/routines.c @@ -87,23 +87,22 @@ NDIS_STATUS AllocatePacketWithBufferX( PNDIS_PACKET *NdisPacket, NDIS_STATUS Status; PCHAR NewData; - NewData = ExAllocatePool( NonPagedPool, Len ); + NewData = exAllocatePool( NonPagedPool, Len ); if( !NewData ) return NDIS_STATUS_NOT_ACCEPTED; // XXX - TrackWithTag(EXALLOC_TAG, NewData, File, Line); if( Data ) RtlCopyMemory(NewData, Data, Len); NdisAllocatePacket( &Status, &Packet, GlobalPacketPool ); if( Status != NDIS_STATUS_SUCCESS ) { - ExFreePool( NewData ); + exFreePool( NewData ); return Status; } TrackWithTag(NDIS_PACKET_TAG, Packet, File, Line); NdisAllocateBuffer( &Status, &Buffer, GlobalBufferPool, NewData, Len ); if( Status != NDIS_STATUS_SUCCESS ) { - ExFreePool( NewData ); + exFreePool( NewData ); FreeNdisPacket( Packet ); } TrackWithTag(NDIS_BUFFER_TAG, Buffer, File, Line); @@ -139,8 +138,7 @@ VOID FreeNdisPacketX NdisQueryBuffer(Buffer, &Data, &Length); NdisFreeBuffer(Buffer); UntrackFL(File,Line,Buffer); - ExFreePool(Data); - UntrackFL(File,Line,Data); + exFreePool(Data); } /* Finally free the NDIS packet discriptor */ diff --git a/reactos/drivers/network/tcpip/include/irp.h b/reactos/drivers/network/tcpip/include/irp.h index 8ca1b55c727..532200980ab 100644 --- a/reactos/drivers/network/tcpip/include/irp.h +++ b/reactos/drivers/network/tcpip/include/irp.h @@ -10,10 +10,4 @@ VOID IRPRemember( PIRP Irp, PCHAR File, UINT Line ); NTSTATUS IRPFinish( PIRP Irp, NTSTATUS Status ); -#ifdef MEMTRACK -#define RIRP(x) IRPRemember(x,__FILE__,__LINE__) -#else -#define RIRP(x) -#endif - #endif/*__IRP_H*/ diff --git a/reactos/drivers/network/tcpip/tcpip/buffer.c b/reactos/drivers/network/tcpip/tcpip/buffer.c index 54ffe641c58..6177845801c 100644 --- a/reactos/drivers/network/tcpip/tcpip/buffer.c +++ b/reactos/drivers/network/tcpip/tcpip/buffer.c @@ -365,7 +365,6 @@ NDIS_STATUS AllocatePacketWithBufferX( PNDIS_PACKET *NdisPacket, NdisAllocateBuffer( &Status, &Buffer, GlobalBufferPool, NewData, Len ); if( Status != NDIS_STATUS_SUCCESS ) { exFreePool( NewData ); - UntrackFL( File, Line, Packet, NDIS_PACKET_TAG ); FreeNdisPacket( Packet ); return Status; } diff --git a/reactos/drivers/network/tcpip/tcpip/dispatch.c b/reactos/drivers/network/tcpip/tcpip/dispatch.c index 30ee764b1ed..962ad4e5f8a 100644 --- a/reactos/drivers/network/tcpip/tcpip/dispatch.c +++ b/reactos/drivers/network/tcpip/tcpip/dispatch.c @@ -106,7 +106,7 @@ VOID DispDataRequestComplete( Irp->IoStatus.Information)); TI_DbgPrint(DEBUG_IRP, ("Completing IRP at (0x%X).\n", Irp)); - IRPFinish(Irp, Irp->IoStatus.Status); + IRPFinish(Irp, Status); TI_DbgPrint(DEBUG_IRP, ("Done Completing IRP\n")); } @@ -181,11 +181,11 @@ VOID NTAPI DispCancelRequest( TCPRemoveIRP( TranContext->Handle.ConnectionContext, Irp ); + IoReleaseCancelSpinLock(Irp->CancelIrql); + if( !ChewCreate( &WorkItem, sizeof(DISCONNECT_TYPE), DispDoDisconnect, &DisType ) ) ASSERT(0); - - IoReleaseCancelSpinLock(Irp->CancelIrql); return; case TDI_SEND_DATAGRAM: @@ -212,7 +212,7 @@ VOID NTAPI DispCancelRequest( } IoReleaseCancelSpinLock(Irp->CancelIrql); - IoCompleteRequest(Irp, IO_NO_INCREMENT); + IRPFinish(Irp, STATUS_CANCELLED); TI_DbgPrint(MAX_TRACE, ("Leaving.\n")); } @@ -256,7 +256,8 @@ VOID NTAPI DispCancelListenRequest( IoReleaseCancelSpinLock(Irp->CancelIrql); - DispDataRequestComplete(Irp, STATUS_CANCELLED, 0); + Irp->IoStatus.Information = 0; + IRPFinish(Irp, STATUS_CANCELLED); TI_DbgPrint(MAX_TRACE, ("Leaving.\n")); } diff --git a/reactos/drivers/network/tcpip/tcpip/irp.c b/reactos/drivers/network/tcpip/tcpip/irp.c index da0e95e890c..104818f6aec 100644 --- a/reactos/drivers/network/tcpip/tcpip/irp.c +++ b/reactos/drivers/network/tcpip/tcpip/irp.c @@ -12,9 +12,7 @@ #include "precomp.h" VOID IRPRemember( PIRP Irp, PCHAR File, UINT Line ) { -#ifdef MEMTRACK TrackWithTag( IRP_TAG, Irp, File, Line ); -#endif } NTSTATUS IRPFinish( PIRP Irp, NTSTATUS Status ) { @@ -23,9 +21,7 @@ NTSTATUS IRPFinish( PIRP Irp, NTSTATUS Status ) { //DbgPrint("Called: Irp %x, Status %x Event %x\n", Irp, Status, Irp->UserEvent); -#ifdef MEMTRACK - UntrackFL( __FILE__, __LINE__, Irp ); -#endif + UntrackFL( __FILE__, __LINE__, Irp, IRP_TAG ); Irp->IoStatus.Status = Status; diff --git a/reactos/drivers/network/tcpip/tcpip/main.c b/reactos/drivers/network/tcpip/tcpip/main.c index 5d9cc9ac472..255dfa3322a 100644 --- a/reactos/drivers/network/tcpip/tcpip/main.c +++ b/reactos/drivers/network/tcpip/tcpip/main.c @@ -406,7 +406,7 @@ TiDispatchOpenClose( NTSTATUS Status; PTRANSPORT_CONTEXT Context; - RIRP(Irp); + IRPRemember(Irp, __FILE__, __LINE__); // DbgPrint("Called. DeviceObject is at (0x%X), IRP is at (0x%X).\n", DeviceObject, Irp); @@ -457,7 +457,7 @@ TiDispatchInternal( BOOLEAN Complete = TRUE; PIO_STACK_LOCATION IrpSp; - RIRP(Irp); + IRPRemember(Irp, __FILE__, __LINE__); IrpSp = IoGetCurrentIrpStackLocation(Irp); @@ -540,8 +540,6 @@ TiDispatchInternal( if( Complete ) IRPFinish( Irp, Status ); - else - Irp->IoStatus.Status = Status; return Status; } @@ -563,7 +561,7 @@ TiDispatch( NTSTATUS Status; PIO_STACK_LOCATION IrpSp; - RIRP(Irp); + IRPRemember(Irp, __FILE__, __LINE__); IrpSp = IoGetCurrentIrpStackLocation(Irp); diff --git a/reactos/drivers/network/tcpip/tcpip/mockbuffer.c b/reactos/drivers/network/tcpip/tcpip/mockbuffer.c index 62d0397cf06..f6f7dbf7d47 100644 --- a/reactos/drivers/network/tcpip/tcpip/mockbuffer.c +++ b/reactos/drivers/network/tcpip/tcpip/mockbuffer.c @@ -432,7 +432,6 @@ NDIS_STATUS AllocatePacketWithBufferX( PNDIS_PACKET *NdisPacket, NewData = exAllocatePool( NonPagedPool, Len ); if( !NewData ) return NDIS_STATUS_NOT_ACCEPTED; // XXX - TrackWithTag(EXALLOC_TAG, NewData, File, Line); if( Data ) RtlCopyMemory(NewData, Data, Len); diff --git a/reactos/lib/drivers/ip/network/memtrack.c b/reactos/lib/drivers/ip/network/memtrack.c index f6e941da474..b65fb0c8643 100644 --- a/reactos/lib/drivers/ip/network/memtrack.c +++ b/reactos/lib/drivers/ip/network/memtrack.c @@ -82,17 +82,14 @@ VOID TrackWithTag( ULONG Tag, PVOID Thing, PCHAR FileName, ULONG LineNo ) { if( ThingInList->Thing == Thing ) { RemoveEntryList(Entry); - TcpipReleaseSpinLock( &AllocatedObjectsLock, OldIrql ); - ShowTrackedThing( "Alloc", ThingInList, FALSE ); - - TrackDumpFL( FileName, LineNo ); - DbgPrint("TRACK: SPECIFIED ALREADY ALLOCATED ITEM %x\n", Thing); - ShowTrackedThing( "Double Alloc (Item in list)", ThingInList, TRUE ); - ShowTrackedThing( "Double Alloc (Item not in list)", TrackedThing, TRUE ); - TcpipBugCheck( 0 ); + TI_DbgPrint(MAX_TRACE,("TRACK: SPECIFIED ALREADY ALLOCATED ITEM %x\n", Thing)); + ShowTrackedThing( "Double Alloc (Item in list)", ThingInList, FALSE ); + ShowTrackedThing( "Double Alloc (Item not in list)", TrackedThing, FALSE ); ExFreeToNPagedLookasideList( &AllocatedObjectsLookasideList, ThingInList ); + + break; } Entry = Entry->Flink; } @@ -100,8 +97,6 @@ VOID TrackWithTag( ULONG Tag, PVOID Thing, PCHAR FileName, ULONG LineNo ) { InsertHeadList( &AllocatedObjectsList, &TrackedThing->Entry ); TcpipReleaseSpinLock( &AllocatedObjectsLock, OldIrql ); - - /*TrackDumpFL( FileName, LineNo );*/ } BOOLEAN ShowTag( ULONG Tag ) { diff --git a/reactos/lib/drivers/ip/network/neighbor.c b/reactos/lib/drivers/ip/network/neighbor.c index 9f1111f8541..dd1bc511035 100644 --- a/reactos/lib/drivers/ip/network/neighbor.c +++ b/reactos/lib/drivers/ip/network/neighbor.c @@ -237,7 +237,7 @@ VOID NBSendSolicit(PNEIGHBOR_CACHE_ENTRY NCE) { TI_DbgPrint(DEBUG_NCACHE, ("Called. NCE (0x%X).\n", NCE)); - if (NCE->State == NUD_INCOMPLETE) + if (NCE->State & NUD_INCOMPLETE) { /* This is the first solicitation of this neighbor. Broadcast a request for the neighbor */