Zebediah Figura : http.sys: Cancel outstanding requests when a handle is closed.
Alexandre Julliard
julliard at winehq.org
Tue Mar 3 16:24:51 CST 2020
Module: wine
Branch: master
Commit: d942f12871c22d0a11840c2ba7af3a67cf1f1317
URL: https://source.winehq.org/git/wine.git/?a=commit;h=d942f12871c22d0a11840c2ba7af3a67cf1f1317
Author: Zebediah Figura <z.figura12 at gmail.com>
Date: Mon Mar 2 21:34:59 2020 -0600
http.sys: Cancel outstanding requests when a handle is closed.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48530
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/http.sys/http.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/dlls/http.sys/http.c b/dlls/http.sys/http.c
index 9587eaa9a8..5fbae66b75 100644
--- a/dlls/http.sys/http.c
+++ b/dlls/http.sys/http.c
@@ -1396,8 +1396,20 @@ static NTSTATUS WINAPI dispatch_close(DEVICE_OBJECT *device, IRP *irp)
{
IO_STACK_LOCATION *stack = IoGetCurrentIrpStackLocation(irp);
struct request_queue *queue = stack->FileObject->FsContext;
+ LIST_ENTRY *entry;
TRACE("Closing queue %p.\n", queue);
+
+ EnterCriticalSection(&http_cs);
+
+ while ((entry = queue->irp_queue.Flink) != &queue->irp_queue)
+ {
+ IRP *queued_irp = CONTAINING_RECORD(entry, IRP, Tail.Overlay.ListEntry);
+ IoCancelIrp(queued_irp);
+ }
+
+ LeaveCriticalSection(&http_cs);
+
close_queue(queue);
irp->IoStatus.Status = STATUS_SUCCESS;
More information about the wine-cvs
mailing list