mirror of
https://github.com/reactos/reactos.git
synced 2024-08-12 06:06:27 +00:00
[AFD]
- Don't leave the IRP queued if TdiSendDatagram does not perform its downcall. Complete it instead. CORE-9810 svn path=/trunk/; revision=68130
This commit is contained in:
parent
b5c2e0b0d1
commit
9df20e14a3
|
@ -379,13 +379,23 @@ AfdConnectedSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
|||
Status = QueueUserModeIrp(FCB, Irp, FUNCTION_SEND);
|
||||
if (Status == STATUS_PENDING)
|
||||
{
|
||||
TdiSendDatagram(&FCB->SendIrp.InFlightRequest,
|
||||
FCB->AddressFile.Object,
|
||||
SendReq->BufferArray[0].buf,
|
||||
SendReq->BufferArray[0].len,
|
||||
TargetAddress,
|
||||
PacketSocketSendComplete,
|
||||
FCB);
|
||||
Status = TdiSendDatagram(&FCB->SendIrp.InFlightRequest,
|
||||
FCB->AddressFile.Object,
|
||||
SendReq->BufferArray[0].buf,
|
||||
SendReq->BufferArray[0].len,
|
||||
TargetAddress,
|
||||
PacketSocketSendComplete,
|
||||
FCB);
|
||||
if (Status != STATUS_PENDING)
|
||||
{
|
||||
NT_VERIFY(RemoveHeadList(&FCB->PendingIrpList[FUNCTION_SEND]) == &Irp->Tail.Overlay.ListEntry);
|
||||
Irp->IoStatus.Status = Status;
|
||||
Irp->IoStatus.Information = 0;
|
||||
(void)IoSetCancelRoutine(Irp, NULL);
|
||||
UnlockBuffers(SendReq->BufferArray, SendReq->BufferCount, FALSE);
|
||||
UnlockRequest(Irp, IoGetCurrentIrpStackLocation(Irp));
|
||||
IoCompleteRequest(Irp, IO_NETWORK_INCREMENT);
|
||||
}
|
||||
}
|
||||
|
||||
ExFreePool( TargetAddress );
|
||||
|
@ -631,13 +641,23 @@ AfdPacketSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
|||
Status = QueueUserModeIrp(FCB, Irp, FUNCTION_SEND);
|
||||
if (Status == STATUS_PENDING)
|
||||
{
|
||||
TdiSendDatagram(&FCB->SendIrp.InFlightRequest,
|
||||
FCB->AddressFile.Object,
|
||||
SendReq->BufferArray[0].buf,
|
||||
SendReq->BufferArray[0].len,
|
||||
TargetAddress,
|
||||
PacketSocketSendComplete,
|
||||
FCB);
|
||||
Status = TdiSendDatagram(&FCB->SendIrp.InFlightRequest,
|
||||
FCB->AddressFile.Object,
|
||||
SendReq->BufferArray[0].buf,
|
||||
SendReq->BufferArray[0].len,
|
||||
TargetAddress,
|
||||
PacketSocketSendComplete,
|
||||
FCB);
|
||||
if (Status != STATUS_PENDING)
|
||||
{
|
||||
NT_VERIFY(RemoveHeadList(&FCB->PendingIrpList[FUNCTION_SEND]) == &Irp->Tail.Overlay.ListEntry);
|
||||
Irp->IoStatus.Status = Status;
|
||||
Irp->IoStatus.Information = 0;
|
||||
(void)IoSetCancelRoutine(Irp, NULL);
|
||||
UnlockBuffers(SendReq->BufferArray, SendReq->BufferCount, FALSE);
|
||||
UnlockRequest(Irp, IoGetCurrentIrpStackLocation(Irp));
|
||||
IoCompleteRequest(Irp, IO_NETWORK_INCREMENT);
|
||||
}
|
||||
}
|
||||
|
||||
ExFreePool(TargetAddress);
|
||||
|
|
Loading…
Reference in a new issue