mirror of
https://github.com/reactos/reactos.git
synced 2024-10-01 23:14:53 +00:00
- Remove the STATUS_PENDING case in UnlockAndMaybeComplete so we can catch pending IRPs which didn't get queued in the PendingIrpList
svn path=/trunk/; revision=43297
This commit is contained in:
parent
29eda3e5dc
commit
605efdf3f2
|
@ -290,22 +290,12 @@ VOID SocketStateUnlock( PAFD_FCB FCB ) {
|
|||
NTSTATUS NTAPI UnlockAndMaybeComplete
|
||||
( PAFD_FCB FCB, NTSTATUS Status, PIRP Irp,
|
||||
UINT Information ) {
|
||||
|
||||
Irp->IoStatus.Status = Status;
|
||||
Irp->IoStatus.Information = Information;
|
||||
|
||||
if( Status == STATUS_PENDING ) {
|
||||
/* We should firstly mark this IRP as pending, because
|
||||
otherwise it may be completed by StreamSocketConnectComplete()
|
||||
before we return from SocketStateUnlock(). */
|
||||
IoMarkIrpPending( Irp );
|
||||
SocketStateUnlock( FCB );
|
||||
} else {
|
||||
if ( Irp->MdlAddress ) UnlockRequest( Irp, IoGetCurrentIrpStackLocation( Irp ) );
|
||||
(void)IoSetCancelRoutine(Irp, NULL);
|
||||
SocketStateUnlock( FCB );
|
||||
IoCompleteRequest( Irp, IO_NETWORK_INCREMENT );
|
||||
}
|
||||
if ( Irp->MdlAddress ) UnlockRequest( Irp, IoGetCurrentIrpStackLocation( Irp ) );
|
||||
(void)IoSetCancelRoutine(Irp, NULL);
|
||||
SocketStateUnlock( FCB );
|
||||
IoCompleteRequest( Irp, IO_NETWORK_INCREMENT );
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
@ -325,5 +315,6 @@ NTSTATUS LeaveIrpUntilLater( PAFD_FCB FCB, PIRP Irp, UINT Function ) {
|
|||
&Irp->Tail.Overlay.ListEntry );
|
||||
IoMarkIrpPending(Irp);
|
||||
(void)IoSetCancelRoutine(Irp, AfdCancelHandler);
|
||||
return UnlockAndMaybeComplete( FCB, STATUS_PENDING, Irp, 0 );
|
||||
SocketStateUnlock( FCB );
|
||||
return STATUS_PENDING;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue