From 252f7c71dae88f7593a710288fdb60bb0333c617 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sun, 21 Sep 2008 02:35:23 +0000 Subject: [PATCH] - Set MiniportBusy to TRUE in MiniDequeueWorkItem instead of MiniQueueWorkItem - Fail if another miniport request is still in progress svn path=/branches/aicom-network-fixes/; revision=36363 --- drivers/network/ndis/ndis/miniport.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/drivers/network/ndis/ndis/miniport.c b/drivers/network/ndis/ndis/miniport.c index 05473fa263d..344f6407678 100644 --- a/drivers/network/ndis/ndis/miniport.c +++ b/drivers/network/ndis/ndis/miniport.c @@ -634,8 +634,6 @@ MiniQueueWorkItem( KeInsertQueueDpc(&Adapter->NdisMiniportBlock.DeferredDpc, NULL, NULL); - Adapter->MiniportBusy = TRUE; - return NDIS_STATUS_SUCCESS; } @@ -663,6 +661,12 @@ MiniDequeueWorkItem( NDIS_DbgPrint(MAX_TRACE, ("Called.\n")); + if (Adapter->MiniportBusy) { + NDIS_DbgPrint(MID_TRACE, ("Waiting for miniport to become free.\n")); + KeInsertQueueDpc(&Adapter->NdisMiniportBlock.DeferredDpc, NULL, NULL); + return NDIS_STATUS_FAILURE; + } + Item = Adapter->WorkQueueHead; if (Item) @@ -678,6 +682,8 @@ MiniDequeueWorkItem( ExFreePool(Item); + Adapter->MiniportBusy = TRUE; + return NDIS_STATUS_SUCCESS; } @@ -900,6 +906,9 @@ VOID NTAPI MiniportWorker(IN PVOID WorkItem) } } + if( NdisStatus != NDIS_STATUS_PENDING ) + Adapter->MiniportBusy = FALSE; + ExFreePool(WorkItem); }