Author: cgutman Date: Thu Oct 23 21:56:16 2008 New Revision: 36921
URL: http://svn.reactos.org/svn/reactos?rev=36921&view=rev Log: - Move the checks inside of the lock
Modified: branches/aicom-network-fixes/drivers/network/afd/afd/connect.c branches/aicom-network-fixes/drivers/network/afd/afd/listen.c branches/aicom-network-fixes/drivers/network/afd/afd/read.c branches/aicom-network-fixes/drivers/network/afd/afd/write.c
Modified: branches/aicom-network-fixes/drivers/network/afd/afd/connect.c URL: http://svn.reactos.org/svn/reactos/branches/aicom-network-fixes/drivers/netw... ============================================================================== --- branches/aicom-network-fixes/drivers/network/afd/afd/connect.c [iso-8859-1] (original) +++ branches/aicom-network-fixes/drivers/network/afd/afd/connect.c [iso-8859-1] Thu Oct 23 21:56:16 2008 @@ -77,11 +77,6 @@ AFD_DbgPrint(MID_TRACE,("Called: FCB %x, FO %x\n", Context, FCB->FileObject));
- if( Irp->Cancel ) { - if( FCB ) FCB->ConnectIrp.InFlightRequest = NULL; - return STATUS_CANCELLED; - } - /* I was wrong about this before as we can have pending writes to a not * yet connected socket */ if( !SocketAcquireStateLock( FCB ) ) return STATUS_FILE_CLOSED; @@ -90,6 +85,11 @@ Irp->IoStatus.Status));
FCB->ConnectIrp.InFlightRequest = NULL; + + if( Irp->Cancel ) { + SocketStateUnlock( FCB ); + return STATUS_CANCELLED; + }
if( NT_SUCCESS(Irp->IoStatus.Status) ) { FCB->PollState |= AFD_EVENT_CONNECT | AFD_EVENT_SEND;
Modified: branches/aicom-network-fixes/drivers/network/afd/afd/listen.c URL: http://svn.reactos.org/svn/reactos/branches/aicom-network-fixes/drivers/netw... ============================================================================== --- branches/aicom-network-fixes/drivers/network/afd/afd/listen.c [iso-8859-1] (original) +++ branches/aicom-network-fixes/drivers/network/afd/afd/listen.c [iso-8859-1] Thu Oct 23 21:56:16 2008 @@ -102,14 +102,14 @@ PAFD_FCB FCB = (PAFD_FCB)Context; PAFD_TDI_OBJECT_QELT Qelt;
+ if( !SocketAcquireStateLock( FCB ) ) return STATUS_FILE_CLOSED; + + FCB->ListenIrp.InFlightRequest = NULL; + if( Irp->Cancel ) { - if( FCB ) FCB->ListenIrp.InFlightRequest = NULL; + SocketStateUnlock( FCB ); return STATUS_CANCELLED; } - - if( !SocketAcquireStateLock( FCB ) ) return STATUS_FILE_CLOSED; - - FCB->ListenIrp.InFlightRequest = NULL;
if( FCB->State == SOCKET_STATE_CLOSED ) { SocketStateUnlock( FCB );
Modified: branches/aicom-network-fixes/drivers/network/afd/afd/read.c URL: http://svn.reactos.org/svn/reactos/branches/aicom-network-fixes/drivers/netw... ============================================================================== --- branches/aicom-network-fixes/drivers/network/afd/afd/read.c [iso-8859-1] (original) +++ branches/aicom-network-fixes/drivers/network/afd/afd/read.c [iso-8859-1] Thu Oct 23 21:56:16 2008 @@ -234,14 +234,15 @@
ASSERT_IRQL(APC_LEVEL);
+ if( !SocketAcquireStateLock( FCB ) ) return Status; + + FCB->ReceiveIrp.InFlightRequest = NULL; + if( Irp->Cancel ) { - if( FCB ) FCB->ReceiveIrp.InFlightRequest = NULL; + SocketStateUnlock( FCB ); return STATUS_CANCELLED; }
- if( !SocketAcquireStateLock( FCB ) ) return Status; - - FCB->ReceiveIrp.InFlightRequest = NULL; FCB->Recv.Content = Irp->IoStatus.Information; FCB->Recv.BytesUsed = 0;
@@ -455,14 +456,14 @@
AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB));
+ if( !SocketAcquireStateLock( FCB ) ) return STATUS_FILE_CLOSED; + + FCB->ReceiveIrp.InFlightRequest = NULL; + if( Irp->Cancel ) { - if( FCB ) FCB->ReceiveIrp.InFlightRequest = NULL; + SocketStateUnlock( FCB ); return STATUS_CANCELLED; } - - if( !SocketAcquireStateLock( FCB ) ) return STATUS_FILE_CLOSED; - - FCB->ReceiveIrp.InFlightRequest = NULL;
if( FCB->State == SOCKET_STATE_CLOSED ) { SocketStateUnlock( FCB );
Modified: branches/aicom-network-fixes/drivers/network/afd/afd/write.c URL: http://svn.reactos.org/svn/reactos/branches/aicom-network-fixes/drivers/netw... ============================================================================== --- branches/aicom-network-fixes/drivers/network/afd/afd/write.c [iso-8859-1] (original) +++ branches/aicom-network-fixes/drivers/network/afd/afd/write.c [iso-8859-1] Thu Oct 23 21:56:16 2008 @@ -40,15 +40,15 @@
ASSERT_IRQL(APC_LEVEL);
- if( Irp->Cancel ) { - if( FCB ) FCB->SendIrp.InFlightRequest = NULL; - return STATUS_CANCELLED; - } - if( !SocketAcquireStateLock( FCB ) ) return Status;
FCB->SendIrp.InFlightRequest = NULL; /* Request is not in flight any longer */ + + if( Irp->Cancel ) { + SocketStateUnlock( FCB ); + return STATUS_CANCELLED; + }
if( FCB->State == SOCKET_STATE_CLOSED ) { SocketStateUnlock( FCB ); @@ -176,19 +176,19 @@ Irp->IoStatus.Status, Irp->IoStatus.Information));
- if( Irp->Cancel ) { - if( FCB ) FCB->SendIrp.InFlightRequest = NULL; - return STATUS_CANCELLED; - } - /* It's ok if the FCB already died */ if( !SocketAcquireStateLock( FCB ) ) return STATUS_SUCCESS;
+ FCB->SendIrp.InFlightRequest = NULL; + /* Request is not in flight any longer */ + + if( Irp->Cancel ) { + SocketStateUnlock( FCB ); + return STATUS_CANCELLED; + } + FCB->PollState |= AFD_EVENT_SEND; PollReeval( FCB->DeviceExt, FCB->FileObject ); - - FCB->SendIrp.InFlightRequest = NULL; - /* Request is not in flight any longer */
if( FCB->State == SOCKET_STATE_CLOSED ) { SocketStateUnlock( FCB );