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

View file

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