free work items after processing them

svn path=/trunk/; revision=14502
This commit is contained in:
Thomas Bluemel 2005-04-05 15:08:18 +00:00
parent 47632d3088
commit 2177dfcfd2
2 changed files with 7 additions and 2 deletions

View file

@ -125,8 +125,11 @@ SerialReadWorkItem(
Irp = WorkItemData->Irp;
ReadBytes(DeviceObject, Irp, WorkItemData);
ExFreePoolWithTag(pWorkItemData, SERIAL_TAG);
IoCompleteRequest(Irp, IO_NO_INCREMENT);
IoFreeWorkItem(WorkItemData->IoWorkItem);
ExFreePoolWithTag(pWorkItemData, SERIAL_TAG);
}
NTSTATUS STDCALL
@ -215,7 +218,8 @@ SerialRead(
WorkItem = IoAllocateWorkItem(DeviceObject);
if (WorkItem)
{
IoQueueWorkItem(WorkItem, SerialReadWorkItem, DelayedWorkQueue, WorkItemData);
WorkItemData->IoWorkItem = WorkItem;
IoQueueWorkItem(WorkItem, SerialReadWorkItem, DelayedWorkQueue, WorkItemData);
IoMarkIrpPending(Irp);
return STATUS_PENDING;
}

View file

@ -108,6 +108,7 @@ typedef struct _SERIAL_DEVICE_EXTENSION
typedef struct _WORKITEM_DATA
{
PIRP Irp;
PIO_WORKITEM IoWorkItem;
BOOLEAN UseIntervalTimeout;
BOOLEAN UseTotalTimeout;