mirror of
https://github.com/reactos/reactos.git
synced 2024-09-29 05:54:05 +00:00
Patch by Cameron Gutman (aicommander <at> gmail <dot> com)
- Don't mess with cancelled IRPs - Don't attempt to cancel an already cancelled IRP - Unmap MDL when then IRP gets completed svn path=/trunk/; revision=34567
This commit is contained in:
parent
846c750785
commit
ecdd55845d
|
@ -82,6 +82,7 @@ static NTSTATUS NTAPI ListenComplete
|
|||
|
||||
if ( Irp->Cancel ) {
|
||||
/* FIXME: is this anything else we need to do? */
|
||||
FCB->ListenIrp.InFlightRequest = NULL;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
|
|
@ -243,7 +243,9 @@ NTSTATUS NTAPI UnlockAndMaybeComplete
|
|||
otherwise it may be completed by StreamSocketConnectComplete()
|
||||
before we return from SocketStateUnlock(). */
|
||||
IoMarkIrpPending( Irp );
|
||||
SocketStateUnlock( FCB );
|
||||
SocketStateUnlock( FCB );
|
||||
if( ShouldUnlock )
|
||||
UnlockRequest( Irp, IoGetCurrentIrpStackLocation( Irp ) );
|
||||
} else {
|
||||
SocketStateUnlock( FCB );
|
||||
Irp->IoStatus.Status = Status;
|
||||
|
|
|
@ -154,6 +154,7 @@ static NTSTATUS ReceiveActivity( PAFD_FCB FCB, PIRP Irp ) {
|
|||
FCB->Overread ? STATUS_END_OF_FILE : STATUS_SUCCESS;
|
||||
NextIrp->IoStatus.Information = 0;
|
||||
if( NextIrp == Irp ) RetStatus = Status;
|
||||
UnlockRequest( NextIrp, IoGetCurrentIrpStackLocation( NextIrp ) );
|
||||
IoCompleteRequest( NextIrp, IO_NETWORK_INCREMENT );
|
||||
FCB->Overread = TRUE;
|
||||
//FCB->PollState |= AFD_EVENT_DISCONNECT;
|
||||
|
@ -197,6 +198,7 @@ static NTSTATUS ReceiveActivity( PAFD_FCB FCB, PIRP Irp ) {
|
|||
NextIrp->IoStatus.Status = Status;
|
||||
NextIrp->IoStatus.Information = TotalBytesCopied;
|
||||
if( NextIrp == Irp ) RetStatus = Status;
|
||||
UnlockRequest( NextIrp, IoGetCurrentIrpStackLocation( NextIrp ) );
|
||||
IoCompleteRequest( NextIrp, IO_NETWORK_INCREMENT );
|
||||
}
|
||||
}
|
||||
|
@ -225,6 +227,11 @@ NTSTATUS NTAPI ReceiveComplete
|
|||
|
||||
ASSERT_IRQL(APC_LEVEL);
|
||||
|
||||
if (Irp->Cancel) {
|
||||
FCB->ReceiveIrp.InFlightRequest = NULL;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
if( !SocketAcquireStateLock( FCB ) ) return Status;
|
||||
|
||||
FCB->ReceiveIrp.InFlightRequest = NULL;
|
||||
|
@ -299,7 +306,7 @@ AfdConnectedSocketReadData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
|||
|
||||
if( !RecvReq->BufferArray ) {
|
||||
return UnlockAndMaybeComplete( FCB, STATUS_ACCESS_VIOLATION,
|
||||
Irp, 0, NULL, FALSE );
|
||||
Irp, 0, NULL, TRUE );
|
||||
}
|
||||
|
||||
Irp->IoStatus.Status = STATUS_PENDING;
|
||||
|
@ -441,6 +448,11 @@ PacketSocketRecvComplete(
|
|||
|
||||
AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB));
|
||||
|
||||
if (Irp->Cancel) {
|
||||
FCB->ReceiveIrp.InFlightRequest = NULL;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
if( !SocketAcquireStateLock( FCB ) ) return STATUS_UNSUCCESSFUL;
|
||||
|
||||
FCB->ReceiveIrp.InFlightRequest = NULL;
|
||||
|
|
|
@ -40,6 +40,11 @@ static NTSTATUS NTAPI SendComplete
|
|||
|
||||
ASSERT_IRQL(APC_LEVEL);
|
||||
|
||||
if (Irp->Cancel) {
|
||||
FCB->ReceiveIrp.InFlightRequest = NULL;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
if( !SocketAcquireStateLock( FCB ) ) return Status;
|
||||
|
||||
FCB->SendIrp.InFlightRequest = NULL;
|
||||
|
@ -169,6 +174,11 @@ static NTSTATUS NTAPI PacketSocketSendComplete
|
|||
Irp->IoStatus.Status,
|
||||
Irp->IoStatus.Information));
|
||||
|
||||
if (Irp->Cancel) {
|
||||
FCB->ReceiveIrp.InFlightRequest = NULL;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/* It's ok if the FCB already died */
|
||||
if( !SocketAcquireStateLock( FCB ) ) return STATUS_SUCCESS;
|
||||
|
||||
|
|
Loading…
Reference in a new issue