Author: greatlrd Date: Tue Jul 4 00:23:10 2006 New Revision: 22804
URL: http://svn.reactos.org/svn/reactos?rev=22804&view=rev Log: 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
Modified: trunk/reactos/ntoskrnl/ps/query.c
Modified: trunk/reactos/ntoskrnl/ps/query.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ps/query.c?rev=228... ============================================================================== --- trunk/reactos/ntoskrnl/ps/query.c (original) +++ trunk/reactos/ntoskrnl/ps/query.c Tue Jul 4 00:23:10 2006 @@ -93,7 +93,7 @@ {TRUE, 0}, // ThreadIdealProcessor {FALSE, 0}, // ThreadPriorityBoost {TRUE, 0}, // ThreadSetTlsArrayAddress - {FALSE, 0}, // ThreadIsIoPending + {TRUE, sizeof(ULONG)}, // ThreadIsIoPending {TRUE, 0} // ThreadHideFromDebugger };
@@ -1191,6 +1191,7 @@ PVOID Address; LARGE_INTEGER Count; BOOLEAN Last; + ULONG IsIoPending; }u; KPROCESSOR_MODE PreviousMode; NTSTATUS Status = STATUS_SUCCESS; @@ -1292,6 +1293,18 @@ 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);