From 3b40e9b0474d4aa913478bbf638d040727ee80cc Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Wed, 20 Aug 2008 19:06:43 +0000 Subject: [PATCH] - Reapply r35481 svn path=/branches/aicom-network-fixes/; revision=35486 --- drivers/network/afd/afd/listen.c | 10 +++++----- drivers/network/afd/afd/read.c | 10 ++++++++++ drivers/network/afd/afd/write.c | 10 ++++++++++ 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/drivers/network/afd/afd/listen.c b/drivers/network/afd/afd/listen.c index 1fa7755ce6f..a7b1544f522 100644 --- a/drivers/network/afd/afd/listen.c +++ b/drivers/network/afd/afd/listen.c @@ -87,15 +87,15 @@ static NTSTATUS NTAPI ListenComplete PAFD_FCB FCB = (PAFD_FCB)Context; PAFD_TDI_OBJECT_QELT Qelt; + if( Irp->Cancel ) { + if( FCB ) FCB->ListenIrp.InFlightRequest = NULL; + return STATUS_CANCELLED; + } + if( !SocketAcquireStateLock( FCB ) ) return Status; FCB->ListenIrp.InFlightRequest = NULL; - if( Irp->Cancel ) { - SocketStateUnlock( FCB ); - return STATUS_SUCCESS; - } - if( FCB->State == SOCKET_STATE_CLOSED ) { SocketStateUnlock( FCB ); DestroySocket( FCB ); diff --git a/drivers/network/afd/afd/read.c b/drivers/network/afd/afd/read.c index 048678c0e76..59f076ddf25 100644 --- a/drivers/network/afd/afd/read.c +++ b/drivers/network/afd/afd/read.c @@ -233,6 +233,11 @@ NTSTATUS NTAPI ReceiveComplete ASSERT_IRQL(APC_LEVEL); + if( Irp->Cancel ) { + if( FCB ) FCB->ReceiveIrp.InFlightRequest = NULL; + return STATUS_CANCELLED; + } + if( !SocketAcquireStateLock( FCB ) ) return Status; FCB->ReceiveIrp.InFlightRequest = NULL; @@ -449,6 +454,11 @@ PacketSocketRecvComplete( AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB)); + if( Irp->Cancel ) { + if( FCB ) FCB->ReceiveIrp.InFlightRequest = NULL; + return STATUS_CANCELLED; + } + if( !SocketAcquireStateLock( FCB ) ) return STATUS_FILE_CLOSED; FCB->ReceiveIrp.InFlightRequest = NULL; diff --git a/drivers/network/afd/afd/write.c b/drivers/network/afd/afd/write.c index b8406eb8e5a..dc9ada72e30 100644 --- a/drivers/network/afd/afd/write.c +++ b/drivers/network/afd/afd/write.c @@ -40,6 +40,11 @@ static NTSTATUS NTAPI SendComplete 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; @@ -170,6 +175,11 @@ static NTSTATUS NTAPI PacketSocketSendComplete 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;