Author: cgutman
Date: Wed Aug 20 12:29:01 2008
New Revision: 35481
URL:
http://svn.reactos.org/svn/reactos?rev=35481&view=rev
Log:
- Fix handling of cancelled IRPs
Modified:
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/listen.c
URL:
http://svn.reactos.org/svn/reactos/branches/aicom-network-fixes/drivers/net…
==============================================================================
--- 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] Wed Aug 20
12:29:01 2008
@@ -87,14 +87,14 @@
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 );
Modified: branches/aicom-network-fixes/drivers/network/afd/afd/read.c
URL:
http://svn.reactos.org/svn/reactos/branches/aicom-network-fixes/drivers/net…
==============================================================================
--- 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] Wed Aug 20
12:29:01 2008
@@ -233,6 +233,11 @@
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;
@@ -448,11 +453,14 @@
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;
-
- if( !SocketAcquireStateLock( FCB ) ) return STATUS_UNSUCCESSFUL;
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/net…
==============================================================================
--- 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] Wed Aug 20
12:29:01 2008
@@ -40,6 +40,11 @@
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;
@@ -169,6 +174,11 @@
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;