[ros-diffs] [ion] 24611: - Fix KeFreezeAllThreads prototype and define it in the internal headers. - Fix two bugs in KeSetBasePriorityThread and KeSetPriorityThread which were using an undefined value for "Lock Released" if the priority wasn't changing, potentially causing a missing spinlock release when none was required (and thus eventually freezing the scheduler)

ion at svn.reactos.org ion at svn.reactos.org
Sun Oct 22 22:39:08 CEST 2006


Author: ion
Date: Mon Oct 23 00:39:08 2006
New Revision: 24611

URL: http://svn.reactos.org/svn/reactos?rev=24611&view=rev
Log:
- Fix KeFreezeAllThreads prototype and define it in the internal headers.
- Fix two bugs in KeSetBasePriorityThread and KeSetPriorityThread which were using an undefined value for "Lock Released" if the priority wasn't changing, potentially causing a missing spinlock release when none was required (and thus eventually freezing the scheduler)

Modified:
    trunk/reactos/ntoskrnl/include/internal/ke.h
    trunk/reactos/ntoskrnl/ke/thrdobj.c

Modified: trunk/reactos/ntoskrnl/include/internal/ke.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/include/internal/ke.h?rev=24611&r1=24610&r2=24611&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/include/internal/ke.h (original)
+++ trunk/reactos/ntoskrnl/include/internal/ke.h Mon Oct 23 00:39:08 2006
@@ -526,6 +526,12 @@
 NTAPI
 KeForceResumeThread(IN PKTHREAD Thread);
 
+VOID
+NTAPI
+KeFreezeAllThreads(
+    VOID
+);
+
 BOOLEAN
 NTAPI
 KeDisableThreadApcQueueing(IN PKTHREAD Thread);

Modified: trunk/reactos/ntoskrnl/ke/thrdobj.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ke/thrdobj.c?rev=24611&r1=24610&r2=24611&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/ke/thrdobj.c (original)
+++ trunk/reactos/ntoskrnl/ke/thrdobj.c Mon Oct 23 00:39:08 2006
@@ -232,16 +232,13 @@
     return PreviousCount;
 }
 
-/*
- * Used by the debugging code to freeze all the process's threads
- * while the debugger is examining their state.
- */
 VOID
 NTAPI
-KeFreezeAllThreads(IN PKPROCESS Process)
+KeFreezeAllThreads(VOID)
 {
     KLOCK_QUEUE_HANDLE LockHandle, ApcLock;
     PKTHREAD Current, CurrentThread = KeGetCurrentThread();
+    PKPROCESS Process = CurrentThread->ApcState.Process;
     PLIST_ENTRY ListHead, NextEntry;
     LONG OldCount;
     ASSERT_IRQL_LESS_OR_EQUAL(DISPATCH_LEVEL);
@@ -1062,7 +1059,7 @@
     KPRIORITY OldBasePriority, Priority, BasePriority;
     LONG OldIncrement;
     PKPROCESS Process;
-    BOOLEAN Released;
+    BOOLEAN Released = FALSE;
     ASSERT_THREAD(Thread);
     ASSERT_IRQL_LESS_OR_EQUAL(DISPATCH_LEVEL);
 
@@ -1218,7 +1215,7 @@
 {
     KIRQL OldIrql;
     KPRIORITY OldPriority;
-    BOOLEAN Released;
+    BOOLEAN Released = FALSE;
     ASSERT_THREAD(Thread);
     ASSERT_IRQL_LESS_OR_EQUAL(DISPATCH_LEVEL);
     ASSERT((Priority <= HIGH_PRIORITY) && (Priority >= LOW_PRIORITY));




More information about the Ros-diffs mailing list