From: Vizzini Date: Thu, 16 Oct 2003 03:26:51 +0000 (+0000) Subject: simplification of irql manipulation in a couple of places - patch by Mike Nordell X-Git-Tag: backups/keyboard_heavy_lifting@12441~258 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=9ce7e4fa9deb2727db4fe8ea246a0f5dc652d7d7;ds=sidebyside simplification of irql manipulation in a couple of places - patch by Mike Nordell svn path=/trunk/; revision=6333 --- diff --git a/reactos/subsys/win32k/objects/gdiobj.c b/reactos/subsys/win32k/objects/gdiobj.c index f6c80d37b08..c7b4ef47fc4 100644 --- a/reactos/subsys/win32k/objects/gdiobj.c +++ b/reactos/subsys/win32k/objects/gdiobj.c @@ -19,7 +19,7 @@ /* * GDIOBJ.C - GDI object manipulation routines * - * $Id: gdiobj.c,v 1.46 2003/10/15 03:09:23 vizzini Exp $ + * $Id: gdiobj.c,v 1.47 2003/10/16 03:26:51 vizzini Exp $ * */ @@ -149,20 +149,15 @@ static FAST_MUTEX RefCountHandling; /*! * Allocate GDI object table. * \param Size - number of entries in the object table. + * Notes:: Must be called at IRQL < DISPATCH_LEVEL. */ static PGDI_HANDLE_TABLE FASTCALL GDIOBJ_iAllocHandleTable (WORD Size) { PGDI_HANDLE_TABLE handleTable; - KIRQL OldIrql; - BOOLEAN IrqlRaised = FALSE; - - if(KeGetCurrentIrql() < APC_LEVEL) - { - KeRaiseIrql(APC_LEVEL, &OldIrql); - IrqlRaised = TRUE; - } + /* prevent APC delivery for the *FastMutexUnsafe calls */ + const KIRQL PrevIrql = KfRaiseIrql(APC_LEVEL); ExAcquireFastMutexUnsafe (&HandleTableMutex); handleTable = ExAllocatePool(PagedPool, sizeof(GDI_HANDLE_TABLE) + @@ -173,9 +168,7 @@ GDIOBJ_iAllocHandleTable (WORD Size) sizeof(GDI_HANDLE_TABLE) + sizeof(PGDIOBJ) * Size); handleTable->wTableSize = Size; ExReleaseFastMutexUnsafe (&HandleTableMutex); - - if(IrqlRaised) - KeLowerIrql(OldIrql); + KfLowerIrql(PrevIrql); return handleTable; } @@ -203,15 +196,9 @@ static WORD FASTCALL GDIOBJ_iGetNextOpenHandleIndex (void) { WORD tableIndex; - BOOLEAN IrqlRaised = FALSE; - KIRQL OldIrql; - - if(KeGetCurrentIrql() < APC_LEVEL) - { - KeRaiseIrql(APC_LEVEL, &OldIrql); - IrqlRaised = TRUE; - } + /* prevent APC delivery for the *FastMutexUnsafe calls */ + const KIRQL PrevIrql = KfRaiseIrql(APC_LEVEL); ExAcquireFastMutexUnsafe (&HandleTableMutex); for (tableIndex = 1; tableIndex < HandleTable->wTableSize; tableIndex++) { @@ -222,9 +209,7 @@ GDIOBJ_iGetNextOpenHandleIndex (void) } } ExReleaseFastMutexUnsafe (&HandleTableMutex); - - if(IrqlRaised) - KeLowerIrql(OldIrql); + KfLowerIrql(PrevIrql); return (tableIndex < HandleTable->wTableSize) ? tableIndex : 0; }