- 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
This commit is contained in:
Cameron Gutman 2008-09-21 02:35:23 +00:00
parent e6386dff73
commit 252f7c71da

View file

@ -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);
}