From ca91433bbcaa14a42ccd58bd5cc9c550709f7800 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sat, 2 Aug 2008 14:52:19 +0000 Subject: [PATCH] - We must complete the IRP if we fail because the function we were called from expects the IRP to be completed after this call - Return the correct status svn path=/branches/aicom-network-fixes/; revision=35038 --- drivers/network/afd/afd/listen.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/drivers/network/afd/afd/listen.c b/drivers/network/afd/afd/listen.c index 166e2a6f912..09634d524d0 100644 --- a/drivers/network/afd/afd/listen.c +++ b/drivers/network/afd/afd/listen.c @@ -18,7 +18,10 @@ static VOID SatisfyAccept( PAFD_DEVICE_EXTENSION DeviceExt, PAFD_TDI_OBJECT_QELT Qelt ) { PAFD_FCB FCB = NewFileObject->FsContext; - if( !SocketAcquireStateLock( FCB ) ) return; + if( !SocketAcquireStateLock( FCB ) ) { + LostSocket( Irp ); + return; + } /* Transfer the connection to the new socket, launch the opening read */ AFD_DbgPrint(MID_TRACE,("Completing a real accept (FCB %x)\n", FCB)); @@ -203,7 +206,6 @@ NTSTATUS AfdListenSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp, NTSTATUS AfdWaitForListen( PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp ) { - NTSTATUS Status = STATUS_SUCCESS; PFILE_OBJECT FileObject = IrpSp->FileObject; PAFD_FCB FCB = FileObject->FsContext; @@ -226,7 +228,7 @@ NTSTATUS AfdWaitForListen( PDEVICE_OBJECT DeviceObject, PIRP Irp, PollReeval( FCB->DeviceExt, FCB->FileObject ); SocketStateUnlock( FCB ); - return Status; + return Irp->IoStatus.Status; } else { AFD_DbgPrint(MID_TRACE,("Holding\n")); @@ -311,10 +313,9 @@ NTSTATUS AfdAccept( PDEVICE_OBJECT DeviceObject, PIRP Irp, FCB->PollState &= ~AFD_EVENT_ACCEPT; SocketStateUnlock( FCB ); - return Status; + return Irp->IoStatus.Status; } } - SocketStateUnlock( FCB ); - return STATUS_UNSUCCESSFUL; + return UnlockAndMaybeComplete( FCB, STATUS_UNSUCCESSFUL, Irp, 0 , NULL ); }