From 2177dfcfd237994cf623649080d7b4cd2a7a09c9 Mon Sep 17 00:00:00 2001 From: Thomas Bluemel Date: Tue, 5 Apr 2005 15:08:18 +0000 Subject: [PATCH] free work items after processing them svn path=/trunk/; revision=14502 --- reactos/drivers/dd/serial/rw.c | 8 ++++++-- reactos/drivers/dd/serial/serial.h | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/reactos/drivers/dd/serial/rw.c b/reactos/drivers/dd/serial/rw.c index 8930840f2ed..f58b4f2bfc4 100644 --- a/reactos/drivers/dd/serial/rw.c +++ b/reactos/drivers/dd/serial/rw.c @@ -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; } diff --git a/reactos/drivers/dd/serial/serial.h b/reactos/drivers/dd/serial/serial.h index 95188f1ce77..a57afe46dd3 100644 --- a/reactos/drivers/dd/serial/serial.h +++ b/reactos/drivers/dd/serial/serial.h @@ -108,6 +108,7 @@ typedef struct _SERIAL_DEVICE_EXTENSION typedef struct _WORKITEM_DATA { PIRP Irp; + PIO_WORKITEM IoWorkItem; BOOLEAN UseIntervalTimeout; BOOLEAN UseTotalTimeout;