mirror of
https://github.com/reactos/reactos.git
synced 2025-04-25 08:00:24 +00:00
- This should fix a rare afd crash
- It was a race condition caused by another thread clearing our IRP while we were still using it svn path=/trunk/; revision=40183
This commit is contained in:
parent
d7ab2a464e
commit
d99f998d2d
4 changed files with 1 additions and 39 deletions
|
@ -323,14 +323,3 @@ NTSTATUS LeaveIrpUntilLater( PAFD_FCB FCB, PIRP Irp, UINT Function ) {
|
|||
&Irp->Tail.Overlay.ListEntry );
|
||||
return UnlockAndMaybeComplete( FCB, STATUS_PENDING, Irp, 0, NULL );
|
||||
}
|
||||
|
||||
VOID SocketCalloutEnter( PAFD_FCB FCB ) {
|
||||
ASSERT(FCB->Locked);
|
||||
FCB->Critical = TRUE;
|
||||
SocketStateUnlock( FCB );
|
||||
}
|
||||
|
||||
VOID SocketCalloutLeave( PAFD_FCB FCB ) {
|
||||
FCB->Critical = FALSE;
|
||||
SocketAcquireStateLock( FCB );
|
||||
}
|
||||
|
|
|
@ -104,8 +104,6 @@ static NTSTATUS TryToSatisfyRecvRequestFromBuffer( PAFD_FCB FCB,
|
|||
if( !FCB->ReceiveIrp.InFlightRequest ) {
|
||||
AFD_DbgPrint(MID_TRACE,("Replenishing buffer\n"));
|
||||
|
||||
SocketCalloutEnter( FCB );
|
||||
|
||||
Status = TdiReceive( &FCB->ReceiveIrp.InFlightRequest,
|
||||
FCB->Connection.Object,
|
||||
TDI_RECEIVE_NORMAL,
|
||||
|
@ -115,8 +113,6 @@ static NTSTATUS TryToSatisfyRecvRequestFromBuffer( PAFD_FCB FCB,
|
|||
ReceiveComplete,
|
||||
FCB );
|
||||
|
||||
SocketCalloutLeave( FCB );
|
||||
|
||||
if( Status == STATUS_SUCCESS )
|
||||
FCB->Recv.Content = FCB->ReceiveIrp.Iosb.Information;
|
||||
HandleEOFOnIrp( FCB, Status, FCB->ReceiveIrp.Iosb.Information );
|
||||
|
@ -559,9 +555,8 @@ PacketSocketRecvComplete(
|
|||
PollReeval( FCB->DeviceExt, FCB->FileObject );
|
||||
|
||||
if( NT_SUCCESS(Irp->IoStatus.Status) ) {
|
||||
/* Now relaunch the datagram request */
|
||||
SocketCalloutEnter( FCB );
|
||||
|
||||
/* Now relaunch the datagram request */
|
||||
Status = TdiReceiveDatagram
|
||||
( &FCB->ReceiveIrp.InFlightRequest,
|
||||
FCB->AddressFile.Object,
|
||||
|
@ -572,8 +567,6 @@ PacketSocketRecvComplete(
|
|||
&FCB->ReceiveIrp.Iosb,
|
||||
PacketSocketRecvComplete,
|
||||
FCB );
|
||||
|
||||
SocketCalloutLeave( FCB );
|
||||
}
|
||||
|
||||
SocketStateUnlock( FCB );
|
||||
|
|
|
@ -134,8 +134,6 @@ static NTSTATUS NTAPI SendComplete
|
|||
if( FCB->Send.BytesUsed ) {
|
||||
FCB->PollState &= ~AFD_EVENT_SEND;
|
||||
|
||||
SocketCalloutEnter( FCB );
|
||||
|
||||
Status = TdiSend( &FCB->SendIrp.InFlightRequest,
|
||||
FCB->Connection.Object,
|
||||
0,
|
||||
|
@ -144,8 +142,6 @@ static NTSTATUS NTAPI SendComplete
|
|||
&FCB->SendIrp.Iosb,
|
||||
SendComplete,
|
||||
FCB );
|
||||
|
||||
SocketCalloutLeave( FCB );
|
||||
} else {
|
||||
FCB->PollState |= AFD_EVENT_SEND;
|
||||
}
|
||||
|
@ -260,8 +256,6 @@ AfdConnectedSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
|||
TdiBuildConnectionInfo( &TargetAddress, FCB->RemoteAddress );
|
||||
|
||||
if( TargetAddress ) {
|
||||
SocketCalloutEnter( FCB );
|
||||
|
||||
Status = TdiSendDatagram
|
||||
( &FCB->SendIrp.InFlightRequest,
|
||||
FCB->AddressFile.Object,
|
||||
|
@ -272,8 +266,6 @@ AfdConnectedSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
|||
PacketSocketSendComplete,
|
||||
FCB );
|
||||
|
||||
SocketCalloutLeave( FCB );
|
||||
|
||||
ExFreePool( TargetAddress );
|
||||
} else Status = STATUS_NO_MEMORY;
|
||||
|
||||
|
@ -358,10 +350,6 @@ AfdConnectedSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
|||
if( TotalBytesCopied > 0 ) {
|
||||
UnlockBuffers( SendReq->BufferArray, SendReq->BufferCount, FALSE );
|
||||
|
||||
FCB->SendIrp.InFlightRequest = (PVOID)1; /* Placeholder */
|
||||
|
||||
SocketCalloutEnter( FCB );
|
||||
|
||||
Status = TdiSend( &FCB->SendIrp.InFlightRequest,
|
||||
FCB->Connection.Object,
|
||||
0,
|
||||
|
@ -371,8 +359,6 @@ AfdConnectedSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
|||
SendComplete,
|
||||
FCB );
|
||||
|
||||
SocketCalloutLeave( FCB );
|
||||
|
||||
if( Status == STATUS_PENDING )
|
||||
Status = STATUS_SUCCESS;
|
||||
|
||||
|
@ -434,8 +420,6 @@ AfdPacketSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
|||
/* Check the size of the Address given ... */
|
||||
|
||||
if( TargetAddress ) {
|
||||
SocketCalloutEnter( FCB );
|
||||
|
||||
Status = TdiSendDatagram
|
||||
( &FCB->SendIrp.InFlightRequest,
|
||||
FCB->AddressFile.Object,
|
||||
|
@ -446,8 +430,6 @@ AfdPacketSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
|||
PacketSocketSendComplete,
|
||||
FCB );
|
||||
|
||||
SocketCalloutLeave( FCB );
|
||||
|
||||
ExFreePool( TargetAddress );
|
||||
} else Status = STATUS_NO_MEMORY;
|
||||
|
||||
|
|
|
@ -271,8 +271,6 @@ PAFD_HANDLE LockHandles( PAFD_HANDLE HandleArray, UINT HandleCount );
|
|||
VOID UnlockHandles( PAFD_HANDLE HandleArray, UINT HandleCount );
|
||||
PVOID LockRequest( PIRP Irp, PIO_STACK_LOCATION IrpSp );
|
||||
VOID UnlockRequest( PIRP Irp, PIO_STACK_LOCATION IrpSp );
|
||||
VOID SocketCalloutEnter( PAFD_FCB FCB );
|
||||
VOID SocketCalloutLeave( PAFD_FCB FCB );
|
||||
|
||||
/* main.c */
|
||||
|
||||
|
|
Loading…
Reference in a new issue