Author: cgutman Date: Sun Mar 22 01:54:08 2009 New Revision: 40168
URL: http://svn.reactos.org/svn/reactos?rev=40168&view=rev Log: - Don't forget to store the status in the IRP - Fix some return statuses
Modified: trunk/reactos/drivers/network/afd/afd/listen.c trunk/reactos/drivers/network/afd/afd/read.c trunk/reactos/drivers/network/afd/afd/write.c
Modified: trunk/reactos/drivers/network/afd/afd/listen.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/afd/afd/lis... ============================================================================== --- trunk/reactos/drivers/network/afd/afd/listen.c [iso-8859-1] (original) +++ trunk/reactos/drivers/network/afd/afd/listen.c [iso-8859-1] Sun Mar 22 01:54:08 2009 @@ -104,19 +104,27 @@ PAFD_FCB FCB = (PAFD_FCB)Context; PAFD_TDI_OBJECT_QELT Qelt;
- if( !SocketAcquireStateLock( FCB ) ) return STATUS_FILE_CLOSED; + if( !SocketAcquireStateLock( FCB ) ) { + Irp->IoStatus.Status = STATUS_FILE_CLOSED; + Irp->IoStatus.Information = 0; + return STATUS_FILE_CLOSED; + }
FCB->ListenIrp.InFlightRequest = NULL;
if( Irp->Cancel ) { + Irp->IoStatus.Status = STATUS_CANCELLED; + Irp->IoStatus.Information = 0; SocketStateUnlock( FCB ); return STATUS_CANCELLED; }
if( FCB->State == SOCKET_STATE_CLOSED ) { + Irp->IoStatus.Status = STATUS_FILE_CLOSED; + Irp->IoStatus.Information = 0; SocketStateUnlock( FCB ); DestroySocket( FCB ); - return STATUS_SUCCESS; + return STATUS_FILE_CLOSED; }
AFD_DbgPrint(MID_TRACE,("Completing listen request.\n"));
Modified: trunk/reactos/drivers/network/afd/afd/read.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/afd/afd/rea... ============================================================================== --- trunk/reactos/drivers/network/afd/afd/read.c [iso-8859-1] (original) +++ trunk/reactos/drivers/network/afd/afd/read.c [iso-8859-1] Sun Mar 22 01:54:08 2009 @@ -235,11 +235,17 @@
ASSERT_IRQL(APC_LEVEL);
- if( !SocketAcquireStateLock( FCB ) ) return Status; + if( !SocketAcquireStateLock( FCB ) ) { + Irp->IoStatus.Status = STATUS_FILE_CLOSED; + Irp->IoStatus.Information = 0; + return STATUS_FILE_CLOSED; + }
FCB->ReceiveIrp.InFlightRequest = NULL;
if( Irp->Cancel ) { + Irp->IoStatus.Status = STATUS_CANCELLED; + Irp->IoStatus.Information = 0; SocketStateUnlock( FCB ); return STATUS_CANCELLED; } @@ -249,11 +255,15 @@
if( FCB->State == SOCKET_STATE_CLOSED ) { AFD_DbgPrint(MIN_TRACE,("!!! CLOSED SOCK GOT A RECEIVE COMPLETE !!!\n")); + Irp->IoStatus.Status = STATUS_FILE_CLOSED; + Irp->IoStatus.Information = 0; SocketStateUnlock( FCB ); DestroySocket( FCB ); - return STATUS_SUCCESS; + return STATUS_FILE_CLOSED; } else if( FCB->State == SOCKET_STATE_LISTENING ) { AFD_DbgPrint(MIN_TRACE,("!!! LISTENER GOT A RECEIVE COMPLETE !!!\n")); + Irp->IoStatus.Status = STATUS_INVALID_PARAMETER; + Irp->IoStatus.Information = 0; SocketStateUnlock( FCB ); return STATUS_INVALID_PARAMETER; } @@ -457,19 +467,27 @@
AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB));
- if( !SocketAcquireStateLock( FCB ) ) return STATUS_FILE_CLOSED; + if( !SocketAcquireStateLock( FCB ) ) { + Irp->IoStatus.Status = STATUS_FILE_CLOSED; + Irp->IoStatus.Information = 0; + return STATUS_FILE_CLOSED; + }
FCB->ReceiveIrp.InFlightRequest = NULL;
if( Irp->Cancel ) { + Irp->IoStatus.Status = STATUS_CANCELLED; + Irp->IoStatus.Information = 0; SocketStateUnlock( FCB ); return STATUS_CANCELLED; }
if( FCB->State == SOCKET_STATE_CLOSED ) { + Irp->IoStatus.Status = STATUS_FILE_CLOSED; + Irp->IoStatus.Information = 0; SocketStateUnlock( FCB ); DestroySocket( FCB ); - return STATUS_SUCCESS; + return STATUS_FILE_CLOSED; }
DatagramRecv = ExAllocatePool( NonPagedPool, DGSize ); @@ -488,6 +506,8 @@ } else Status = STATUS_NO_MEMORY;
if( !NT_SUCCESS( Status ) ) { + Irp->IoStatus.Status = Status; + Irp->IoStatus.Information = 0; if( DatagramRecv ) ExFreePool( DatagramRecv ); SocketStateUnlock( FCB ); return Status;
Modified: trunk/reactos/drivers/network/afd/afd/write.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/afd/afd/wri... ============================================================================== --- trunk/reactos/drivers/network/afd/afd/write.c [iso-8859-1] (original) +++ trunk/reactos/drivers/network/afd/afd/write.c [iso-8859-1] Sun Mar 22 01:54:08 2009 @@ -40,20 +40,28 @@
ASSERT_IRQL(APC_LEVEL);
- if( !SocketAcquireStateLock( FCB ) ) return Status; + if( !SocketAcquireStateLock( FCB ) ) { + Irp->IoStatus.Status = STATUS_FILE_CLOSED; + Irp->IoStatus.Information = 0; + return STATUS_FILE_CLOSED; + }
FCB->SendIrp.InFlightRequest = NULL; /* Request is not in flight any longer */
if( Irp->Cancel ) { + Irp->IoStatus.Status = STATUS_CANCELLED; + Irp->IoStatus.Information = 0; SocketStateUnlock( FCB ); return STATUS_CANCELLED; }
if( FCB->State == SOCKET_STATE_CLOSED ) { + Irp->IoStatus.Status = STATUS_FILE_CLOSED; + Irp->IoStatus.Information = 0; SocketStateUnlock( FCB ); DestroySocket( FCB ); - return STATUS_SUCCESS; + return STATUS_FILE_CLOSED; }
if( !NT_SUCCESS(Status) ) { @@ -176,13 +184,18 @@ Irp->IoStatus.Status, Irp->IoStatus.Information));
- /* It's ok if the FCB already died */ - if( !SocketAcquireStateLock( FCB ) ) return STATUS_SUCCESS; + if( !SocketAcquireStateLock( FCB ) ) { + Irp->IoStatus.Status = STATUS_FILE_CLOSED; + Irp->IoStatus.Information = 0; + return STATUS_FILE_CLOSED; + }
FCB->SendIrp.InFlightRequest = NULL; /* Request is not in flight any longer */
if( Irp->Cancel ) { + Irp->IoStatus.Status = STATUS_CANCELLED; + Irp->IoStatus.Information = 0; SocketStateUnlock( FCB ); return STATUS_CANCELLED; } @@ -191,9 +204,11 @@ PollReeval( FCB->DeviceExt, FCB->FileObject );
if( FCB->State == SOCKET_STATE_CLOSED ) { + Irp->IoStatus.Status = STATUS_FILE_CLOSED; + Irp->IoStatus.Information = 0; SocketStateUnlock( FCB ); DestroySocket( FCB ); - return STATUS_SUCCESS; + return STATUS_FILE_CLOSED; }
SocketStateUnlock( FCB );