[ros-diffs] [arty] 35399: Merge aicom-network-fixes up to 35398

arty at svn.reactos.org arty at svn.reactos.org
Sun Aug 17 00:39:01 CEST 2008


Author: arty
Date: Sat Aug 16 17:39:01 2008
New Revision: 35399

URL: http://svn.reactos.org/svn/reactos?rev=35399&view=rev
Log:
Merge aicom-network-fixes up to 35398

Modified:
    trunk/reactos/drivers/network/afd/afd/context.c
    trunk/reactos/drivers/network/afd/afd/info.c
    trunk/reactos/drivers/network/afd/afd/listen.c
    trunk/reactos/drivers/network/afd/afd/lock.c
    trunk/reactos/drivers/network/afd/afd/main.c
    trunk/reactos/drivers/network/tcpip/tcpip/irp.c

Modified: trunk/reactos/drivers/network/afd/afd/context.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/afd/afd/context.c?rev=35399&r1=35398&r2=35399&view=diff
==============================================================================
--- trunk/reactos/drivers/network/afd/afd/context.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/network/afd/afd/context.c [iso-8859-1] Sat Aug 16 17:39:01 2008
@@ -39,27 +39,30 @@
 NTSTATUS STDCALL
 AfdSetContext( PDEVICE_OBJECT DeviceObject, PIRP Irp,
 	       PIO_STACK_LOCATION IrpSp ) {
-    NTSTATUS Status = STATUS_NO_MEMORY;
+    NTSTATUS Status = STATUS_BUFFER_TOO_SMALL;
     PFILE_OBJECT FileObject = IrpSp->FileObject;
     PAFD_FCB FCB = FileObject->FsContext;
 
     if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp );
 
+    if( FCB->Context ) {
+	ExFreePool( FCB->Context );
+	FCB->Context = NULL;
+    }
+
     if( FCB->ContextSize <
 	IrpSp->Parameters.DeviceIoControl.InputBufferLength ) {
-	if( FCB->Context )
-	    ExFreePool( FCB->Context );
 	FCB->Context =
 	    ExAllocatePool
 	    ( PagedPool,
 	      IrpSp->Parameters.DeviceIoControl.InputBufferLength );
-    }
 
-    if( FCB->Context ) {
-	Status = STATUS_SUCCESS;
+	if( !FCB->Context ) return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, Irp, 0, NULL );
+
 	RtlCopyMemory( FCB->Context,
 		       IrpSp->Parameters.DeviceIoControl.Type3InputBuffer,
 		       IrpSp->Parameters.DeviceIoControl.InputBufferLength );
+	Status = STATUS_SUCCESS;
     }
 
     AFD_DbgPrint(MID_TRACE,("Returning %x\n", Status));

Modified: trunk/reactos/drivers/network/afd/afd/info.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/afd/afd/info.c?rev=35399&r1=35398&r2=35399&view=diff
==============================================================================
--- trunk/reactos/drivers/network/afd/afd/info.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/network/afd/afd/info.c [iso-8859-1] Sat Aug 16 17:39:01 2008
@@ -24,12 +24,9 @@
     AFD_DbgPrint(MID_TRACE,("Called %x %x\n", InfoReq,
 			    InfoReq ? InfoReq->InformationClass : 0));
 
+    if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp );
+
     _SEH_TRY {
-	if( !SocketAcquireStateLock( FCB ) ) {
-	    Status = LostSocket( Irp );
-	    _SEH_YIELD(return Status);
-	}
-
 	switch( InfoReq->InformationClass ) {
 	case AFD_INFO_RECEIVE_WINDOW_SIZE:
 	    InfoReq->Information.Ulong = FCB->Recv.Size;
@@ -113,7 +110,7 @@
                       TDI_QUERY_ADDRESS_INFO,
                       Mdl );
             } else {
-                if( !NT_SUCCESS
+                if( NT_SUCCESS
                     ( Status = TdiBuildNullConnectionInfo
                       ( &ConnInfo,
                         FCB->LocalAddress->Address[0].AddressType ) ) ) {
@@ -148,11 +145,11 @@
 
                 if( ConnInfo ) ExFreePool( ConnInfo );
                 if( SysMdl ) IoFreeMdl( SysMdl );
+                if( TransAddr ) MmUnmapLockedPages( TransAddr, Mdl );
             }
+	  /* MmUnlockPages( Mdl ); */
 	}
-
-	/* MmUnlockPages( Mdl ); */
-	/* IoFreeMdl( Mdl ); */
+    /* IoFreeMdl( Mdl ); */
     } else {
     	Status = STATUS_INSUFFICIENT_RESOURCES;
     }

Modified: trunk/reactos/drivers/network/afd/afd/listen.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/afd/afd/listen.c?rev=35399&r1=35398&r2=35399&view=diff
==============================================================================
--- trunk/reactos/drivers/network/afd/afd/listen.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/network/afd/afd/listen.c [iso-8859-1] Sat Aug 16 17:39:01 2008
@@ -188,14 +188,17 @@
 
     if( !NT_SUCCESS(Status) ) return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL );
 
-    FCB->State = SOCKET_STATE_LISTENING;
-
     TdiBuildNullConnectionInfo
 	( &FCB->ListenIrp.ConnectionCallInfo,
 	  FCB->LocalAddress->Address[0].AddressType );
     TdiBuildNullConnectionInfo
 	( &FCB->ListenIrp.ConnectionReturnInfo,
 	  FCB->LocalAddress->Address[0].AddressType );
+
+    if( !FCB->ListenIrp.ConnectionReturnInfo || !FCB->ListenIrp.ConnectionCallInfo )
+	return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, Irp, 0, NULL );
+
+    FCB->State = SOCKET_STATE_LISTENING;
 
     Status = TdiListen( &FCB->ListenIrp.InFlightRequest,
 			FCB->Connection.Object,
@@ -272,6 +275,8 @@
 		( &FCB->ListenIrp.ConnectionReturnInfo,
 		  FCB->LocalAddress->Address[0].AddressType );
 
+	    if( !FCB->ListenIrp.ConnectionReturnInfo ) return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, Irp, 0, NULL );
+
 	    Status = TdiListen( &FCB->ListenIrp.InFlightRequest,
 				FCB->Connection.Object,
 				&FCB->ListenIrp.ConnectionCallInfo,
@@ -306,6 +311,8 @@
 		  (PVOID *)&NewFileObject,
 		  NULL );
 
+            if( !NT_SUCCESS(Status) ) UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL );
+
             ASSERT(NewFileObject != FileObject);
             ASSERT(NewFileObject->FsContext != FCB);
 

Modified: trunk/reactos/drivers/network/afd/afd/lock.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/afd/afd/lock.c?rev=35399&r1=35398&r2=35399&view=diff
==============================================================================
--- trunk/reactos/drivers/network/afd/afd/lock.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/network/afd/afd/lock.c [iso-8859-1] Sat Aug 16 17:39:01 2008
@@ -167,7 +167,7 @@
     NTSTATUS Status = STATUS_SUCCESS;
     PVOID CurrentThread = KeGetCurrentThread();
 
-    ASSERT(KeGetCurrentIrql() == PASSIVE_LEVEL);
+    ASSERT(KeGetCurrentIrql() <= APC_LEVEL);
 
     AFD_DbgPrint(MAX_TRACE,("Called on %x, attempting to lock\n", FCB));
 
@@ -218,7 +218,7 @@
     PVOID CurrentThread = KeGetCurrentThread();
 #endif
     ASSERT(FCB->LockCount > 0);
-    ASSERT(KeGetCurrentIrql() == PASSIVE_LEVEL);
+    ASSERT(KeGetCurrentIrql() <= APC_LEVEL);
 
     ExAcquireFastMutex( &FCB->Mutex );
     FCB->LockCount--;

Modified: trunk/reactos/drivers/network/afd/afd/main.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/afd/afd/main.c?rev=35399&r1=35398&r2=35399&view=diff
==============================================================================
--- trunk/reactos/drivers/network/afd/afd/main.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/network/afd/afd/main.c [iso-8859-1] Sat Aug 16 17:39:01 2008
@@ -210,8 +210,12 @@
 	ExFreePool( FCB->LocalAddress );
     if( FCB->RemoteAddress )
 	ExFreePool( FCB->RemoteAddress );
-
-    ExFreePool(FCB->TdiDeviceName.Buffer);
+    if( FCB->ListenIrp.ConnectionReturnInfo )
+	ExFreePool( FCB->ListenIrp.ConnectionReturnInfo );
+    if( FCB->ListenIrp.ConnectionCallInfo )
+	ExFreePool( FCB->ListenIrp.ConnectionCallInfo );
+    if( FCB->TdiDeviceName.Buffer )
+	ExFreePool(FCB->TdiDeviceName.Buffer);
 
     ExFreePool(FCB);
     AFD_DbgPrint(MIN_TRACE,("Deleted (%x)\n", FCB));

Modified: trunk/reactos/drivers/network/tcpip/tcpip/irp.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/tcpip/tcpip/irp.c?rev=35399&r1=35398&r2=35399&view=diff
==============================================================================
--- trunk/reactos/drivers/network/tcpip/tcpip/irp.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/network/tcpip/tcpip/irp.c [iso-8859-1] Sat Aug 16 17:39:01 2008
@@ -27,14 +27,14 @@
     UntrackFL( __FILE__, __LINE__, Irp );
 #endif
 
-    (void)IoSetCancelRoutine( Irp, NULL );
+    Irp->IoStatus.Status = Status;
 
     if( Status == STATUS_PENDING )
 	IoMarkIrpPending( Irp );
     else {
-	Irp->IoStatus.Status = Status;
 	Irql = KeGetCurrentIrql();
 
+	(void)IoSetCancelRoutine( Irp, NULL );
 	IoCompleteRequest( Irp, IO_NETWORK_INCREMENT );
 	if (KeGetCurrentIrql() != Irql) {
 	    DbgPrint("WARNING: IO COMPLETION RETURNED AT WRONG IRQL:\n");



More information about the Ros-diffs mailing list