free work items after processing them Modified: trunk/reactos/drivers/dd/serial/rw.c Modified: trunk/reactos/drivers/dd/serial/serial.h _____
Modified: trunk/reactos/drivers/dd/serial/rw.c --- trunk/reactos/drivers/dd/serial/rw.c 2005-04-05 12:34:38 UTC (rev 14501) +++ trunk/reactos/drivers/dd/serial/rw.c 2005-04-05 15:08:18 UTC (rev 14502) @@ -125,8 +125,11 @@
Irp = WorkItemData->Irp; ReadBytes(DeviceObject, Irp, WorkItemData); + + IoCompleteRequest(Irp, IO_NO_INCREMENT); + + IoFreeWorkItem(WorkItemData->IoWorkItem); ExFreePoolWithTag(pWorkItemData, SERIAL_TAG); - IoCompleteRequest(Irp, IO_NO_INCREMENT); }
NTSTATUS STDCALL @@ -215,7 +218,8 @@ WorkItem = IoAllocateWorkItem(DeviceObject); if (WorkItem) { - IoQueueWorkItem(WorkItem, SerialReadWorkItem, DelayedWorkQueue, WorkItemData); + WorkItemData->IoWorkItem = WorkItem; + IoQueueWorkItem(WorkItem, SerialReadWorkItem, DelayedWorkQueue, WorkItemData); IoMarkIrpPending(Irp); return STATUS_PENDING; } _____
Modified: trunk/reactos/drivers/dd/serial/serial.h --- trunk/reactos/drivers/dd/serial/serial.h 2005-04-05 12:34:38 UTC (rev 14501) +++ trunk/reactos/drivers/dd/serial/serial.h 2005-04-05 15:08:18 UTC (rev 14502) @@ -108,6 +108,7 @@
typedef struct _WORKITEM_DATA { PIRP Irp; + PIO_WORKITEM IoWorkItem; BOOLEAN UseIntervalTimeout; BOOLEAN UseTotalTimeout;