From d2bab053ae126af05f5ae76f45db32871d6899f0 Mon Sep 17 00:00:00 2001 From: Magnus Olsen Date: Mon, 3 Jul 2006 20:23:10 +0000 Subject: [PATCH] 1 of 4 commit (sorry my svn clinet is crazy for moment) Commit w3seek patch from bug 1609 : file attachment (id=910) The attached patch implements QueueUserWorkItem()/RtlQueueWorkItem() (lacks optimizations!!!). WINE's latest rpcrt4 relies on it. 1. Implement QueueUserWorkItem()/RtlQueueWorkItem() : 2. A slightly optimized 3. Supports WT_TRANSFER_IMPERSONATION 4. Slightly improved handling of growing/shrinking the pool by assuming work items with WT_EXECUTELONGFUNCTION run longer 5. Fixes a hack that made a worker thread always terminate if there were at least one more thread available svn path=/trunk/; revision=22804 --- reactos/ntoskrnl/ps/query.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/ps/query.c b/reactos/ntoskrnl/ps/query.c index c402b1bb6cc..ceef2a0f270 100644 --- a/reactos/ntoskrnl/ps/query.c +++ b/reactos/ntoskrnl/ps/query.c @@ -93,7 +93,7 @@ static const struct {TRUE, 0}, // ThreadIdealProcessor {FALSE, 0}, // ThreadPriorityBoost {TRUE, 0}, // ThreadSetTlsArrayAddress - {FALSE, 0}, // ThreadIsIoPending + {TRUE, sizeof(ULONG)}, // ThreadIsIoPending {TRUE, 0} // ThreadHideFromDebugger }; @@ -1191,6 +1191,7 @@ NtQueryInformationThread (IN HANDLE ThreadHandle, PVOID Address; LARGE_INTEGER Count; BOOLEAN Last; + ULONG IsIoPending; }u; KPROCESSOR_MODE PreviousMode; NTSTATUS Status = STATUS_SUCCESS; @@ -1292,6 +1293,18 @@ NtQueryInformationThread (IN HANDLE ThreadHandle, u.Last = FALSE; } break; + + case ThreadIsIoPending: + { + KIRQL OldIrql; + + /* Raise the IRQL to protect the IRP list */ + KeRaiseIrql(APC_LEVEL, &OldIrql); + u.IsIoPending = !IsListEmpty(&Thread->IrpList); + KeLowerIrql(OldIrql); + break; + } + default: /* Shoult never occure if the data table is correct */ KEBUGCHECK(0);