- Change our method of queuing work items so we don't leak anymore

svn path=/branches/aicom-network-fixes/; revision=36211
This commit is contained in:
Cameron Gutman 2008-09-14 05:16:32 +00:00
parent ac40a36ce9
commit 91ac8bce6e

View file

@ -748,11 +748,10 @@ NdisMQueryInformationComplete(
KeLowerIrql(OldIrql); KeLowerIrql(OldIrql);
} }
VOID NTAPI MiniportWorker( VOID NTAPI MiniportWorker(IN PVOID WorkItem)
IN PDEVICE_OBJECT DeviceObject,
IN PVOID Context)
{ {
PLOGICAL_ADAPTER Adapter = GET_LOGICAL_ADAPTER(Context); PNDIS_WORK_ITEM NdisWorkItem = WorkItem;
PLOGICAL_ADAPTER Adapter = GET_LOGICAL_ADAPTER(NdisWorkItem->Context);
KIRQL OldIrql; KIRQL OldIrql;
NDIS_STATUS NdisStatus; NDIS_STATUS NdisStatus;
PVOID WorkItemContext; PVOID WorkItemContext;
@ -858,6 +857,8 @@ VOID NTAPI MiniportWorker(
break; break;
} }
} }
ExFreePool(WorkItem);
} }
@ -876,15 +877,20 @@ VOID NTAPI MiniportDpc(
* SystemArgument2 = Unused * SystemArgument2 = Unused
*/ */
{ {
PIO_WORKITEM WorkItem; PNDIS_WORK_ITEM NdisWorkItem;
PLOGICAL_ADAPTER Adapter = GET_LOGICAL_ADAPTER(DeferredContext); PWORK_QUEUE_ITEM WorkItem;
NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n")); NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n"));
WorkItem = IoAllocateWorkItem(Adapter->NdisMiniportBlock.DeviceObject); NdisWorkItem = ExAllocatePool(NonPagedPool, sizeof(PNDIS_WORK_ITEM));
if( !WorkItem ) return;
IoQueueWorkItem(WorkItem, MiniportWorker, CriticalWorkQueue, DeferredContext); WorkItem = (PWORK_QUEUE_ITEM)NdisWorkItem->WrapperReserved;
NdisWorkItem->Context = DeferredContext;
ExInitializeWorkItem(WorkItem, MiniportWorker, NdisWorkItem);
ExQueueWorkItem(WorkItem, CriticalWorkQueue);
} }