Author: cgutman Date: Wed Aug 20 09:56:12 2008 New Revision: 35480
URL: http://svn.reactos.org/svn/reactos?rev=35480&view=rev Log: - Don't forget about ConnectIrp (This fix was lost in the merge) - Don't destroy the same socket twice - Don't unlock the same socket twice - Don't destroy a socket with pending IRPs
Modified: branches/aicom-network-fixes/drivers/network/afd/afd/main.c
Modified: branches/aicom-network-fixes/drivers/network/afd/afd/main.c URL: http://svn.reactos.org/svn/reactos/branches/aicom-network-fixes/drivers/netw... ============================================================================== --- branches/aicom-network-fixes/drivers/network/afd/afd/main.c [iso-8859-1] (original) +++ branches/aicom-network-fixes/drivers/network/afd/afd/main.c [iso-8859-1] Wed Aug 20 09:56:12 2008 @@ -208,18 +208,18 @@ InFlightRequest[0] = FCB->ListenIrp; InFlightRequest[1] = FCB->ReceiveIrp; InFlightRequest[2] = FCB->SendIrp; + InFlightRequest[3] = FCB->ConnectIrp;
/* Return early here because we might be called in the mean time. */ if( !(FCB->Critical || FCB->ListenIrp.InFlightRequest || FCB->ReceiveIrp.InFlightRequest || - FCB->SendIrp.InFlightRequest) ) { + FCB->SendIrp.InFlightRequest || + FCB->ConnectIrp.InFlightRequest) ) { AFD_DbgPrint(MIN_TRACE,("Leaving socket alive (%x %x %x)\n", FCB->ListenIrp.InFlightRequest, FCB->ReceiveIrp.InFlightRequest, FCB->SendIrp.InFlightRequest)); - SocketStateUnlock(FCB); - DestroySocket(FCB); Irp->IoStatus.Status = STATUS_SUCCESS; Irp->IoStatus.Information = 0; IoCompleteRequest(Irp, IO_NO_INCREMENT); @@ -242,12 +242,13 @@ }
FCB->PendingClose = Irp; + DestroySocket( FCB ); + Irp->IoStatus.Status = STATUS_SUCCESS; Irp->IoStatus.Information = 0; IoCompleteRequest(Irp, IO_NO_INCREMENT); }
- DestroySocket( FCB ); AFD_DbgPrint(MID_TRACE, ("Returning success.\n"));
return Irp->IoStatus.Status;