- Small semaphore code simplification/optimization.
Modified: trunk/reactos/ntoskrnl/ke/kthread.c
Modified: trunk/reactos/ntoskrnl/ke/sem.c
_____
Modified: trunk/reactos/ntoskrnl/ke/kthread.c
--- trunk/reactos/ntoskrnl/ke/kthread.c 2005-10-02 08:22:49 UTC (rev
18201)
+++ trunk/reactos/ntoskrnl/ke/kthread.c 2005-10-02 08:31:45 UTC (rev
18202)
@@ -473,7 +473,10 @@
{
/* Get the Mutant */
Mutant = CONTAINING_RECORD(NextEntry, KMUTANT,
MutantListEntry);
- DPRINT1("Mutant: %p. Type, Size %x %x\n", Mutant,
Mutant->Header.Type, Mutant->Header.Size);
+ DPRINT1("Mutant: %p. Type, Size %x %x\n",
+ Mutant,
+ Mutant->Header.Type,
+ Mutant->Header.Size);
/* Make sure it's not terminating with APCs off */
if (Mutant->ApcDisable)
_____
Modified: trunk/reactos/ntoskrnl/ke/sem.c
--- trunk/reactos/ntoskrnl/ke/sem.c 2005-10-02 08:22:49 UTC (rev
18201)
+++ trunk/reactos/ntoskrnl/ke/sem.c 2005-10-02 08:31:45 UTC (rev
18202)
@@ -1,11 +1,10 @@
-/* $Id$
- *
+/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
* FILE: ntoskrnl/ke/sem.c
* PURPOSE: Implements kernel semaphores
- *
- * PROGRAMMERS: David Welch (welch(a)mcmail.com)
+ * PROGRAMMERS: Alex Ionescu (alex(a)relsoft.net)
+ * David Welch (welch(a)mcmail.com)
*/
/* INCLUDES
*****************************************************************/
@@ -25,13 +24,12 @@
LONG Count,
LONG Limit)
{
-
DPRINT("KeInitializeSemaphore Sem: %x\n", Semaphore);
/* Simply Initialize the Header */
KeInitializeDispatcherHeader(&Semaphore->Header,
SemaphoreObject,
- sizeof(KSEMAPHORE)/sizeof(ULONG),
+ sizeof(KSEMAPHORE) / sizeof(ULONG),
Count);
/* Set the Limit */
@@ -46,7 +44,7 @@
KeReadStateSemaphore(PKSEMAPHORE Semaphore)
{
/* Just return the Signal State */
- return(Semaphore->Header.SignalState);
+ return Semaphore->Header.SignalState;
}
/*
@@ -77,9 +75,8 @@
KPRIORITY Increment,
LONG Adjustment,
BOOLEAN Wait)
-
{
- ULONG InitialState;
+ LONG InitialState, ULONG State;
KIRQL OldIrql;
PKTHREAD CurrentThread;
@@ -92,36 +89,36 @@
/* Lock the Dispatcher Database */
OldIrql = KeAcquireDispatcherDatabaseLock();
- /* Save the Old State */
+ /* Save the Old State and get new one */
InitialState = Semaphore->Header.SignalState;
+ State = InitialState + Adjustement;
/* Check if the Limit was exceeded */
- if (Semaphore->Limit < (LONG) InitialState + Adjustment ||
- InitialState > InitialState + Adjustment) {
-
+ if ((Semaphore->Limit < State) || (InitialState > State))
+ {
/* Raise an error if it was exceeded */
KeReleaseDispatcherDatabaseLock(OldIrql);
ExRaiseStatus(STATUS_SEMAPHORE_LIMIT_EXCEEDED);
}
/* Now set the new state */
- Semaphore->Header.SignalState += Adjustment;
+ Semaphore->Header.SignalState = State;
/* Check if we should wake it */
- if (InitialState == 0 &&
!IsListEmpty(&Semaphore->Header.WaitListHead)) {
-
+ if (!(InitialState) &&
!(IsListEmpty(&Semaphore->Header.WaitListHead))
+ {
/* Wake the Semaphore */
KiWaitTest(&Semaphore->Header, Increment);
}
/* If the Wait is true, then return with a Wait and don't unlock
the Dispatcher Database */
- if (Wait == FALSE) {
-
+ if (Wait == FALSE)
+ {
/* Release the Lock */
KeReleaseDispatcherDatabaseLock(OldIrql);
-
- } else {
-
+ }
+ else
+ {
/* Set a wait */
CurrentThread = KeGetCurrentThread();
CurrentThread->WaitNext = TRUE;