From 15cbc1d92dc6c0591293de48945fd7790511dd95 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Fri, 10 Apr 2009 19:00:51 +0000 Subject: [PATCH] - Deserialized miniports always complete their sends asynchronously so we return NDIS_STATUS_PENDING when we call one (so the ProtocolSendComplete handler doesn't get called twice thus double-completing the packet) - Fixes miniport drivers that use a deserialized SendPackets handler (including the rtl8139) - The rtl8139 driver still doesn't work (likely due to a bug in tcpip) svn path=/trunk/; revision=40441 --- reactos/drivers/network/ndis/ndis/miniport.c | 2 +- reactos/drivers/network/ndis/ndis/protocol.c | 8 +------- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/reactos/drivers/network/ndis/ndis/miniport.c b/reactos/drivers/network/ndis/ndis/miniport.c index 08b9407c2c8..67d383ec0c3 100644 --- a/reactos/drivers/network/ndis/ndis/miniport.c +++ b/reactos/drivers/network/ndis/ndis/miniport.c @@ -975,7 +975,7 @@ MiniportWorker(IN PDEVICE_OBJECT DeviceObject, IN PVOID Context) NDIS_DbgPrint(MAX_TRACE, ("Calling miniport's SendPackets handler\n")); (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.SendPacketsHandler)( Adapter->NdisMiniportBlock.MiniportAdapterContext, (PPNDIS_PACKET)&WorkItemContext, 1); - NdisStatus = NDIS_GET_PACKET_STATUS((PNDIS_PACKET)WorkItemContext); + NdisStatus = NDIS_STATUS_PENDING; } else { diff --git a/reactos/drivers/network/ndis/ndis/protocol.c b/reactos/drivers/network/ndis/ndis/protocol.c index 532601b9965..34263d3c674 100644 --- a/reactos/drivers/network/ndis/ndis/protocol.c +++ b/reactos/drivers/network/ndis/ndis/protocol.c @@ -201,7 +201,7 @@ proSendPacketToMiniport(PLOGICAL_ADAPTER Adapter, PNDIS_PACKET Packet) NDIS_DbgPrint(MAX_TRACE, ("Calling miniport's SendPackets handler\n")); (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.SendPacketsHandler)( Adapter->NdisMiniportBlock.MiniportAdapterContext, &Packet, 1); - NdisStatus = NDIS_GET_PACKET_STATUS(Packet); + NdisStatus = NDIS_STATUS_PENDING; } else { /* SendPackets is called at DISPATCH_LEVEL for all serialized miniports */ KeRaiseIrql(DISPATCH_LEVEL, &RaiseOldIrql); @@ -322,12 +322,6 @@ ProSendPackets( { (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.SendPacketsHandler)( Adapter->NdisMiniportBlock.MiniportAdapterContext, PacketArray, NumberOfPackets); - for (i = 0; i < NumberOfPackets; i++) - { - NdisStatus = NDIS_GET_PACKET_STATUS(PacketArray[i]); - if (NdisStatus != NDIS_STATUS_PENDING) - MiniSendComplete(Adapter, PacketArray[i], NdisStatus); - } } else {