1 /* $Id: critical.c,v 1.10 2004/08/15 16:39:05 chorns Exp $
3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS kernel
5 * FILE: ntoskrnl/ke/critical.c
6 * PURPOSE: Implement critical regions
7 * PROGRAMMER: David Welch (welch@mcmail.com)
12 /* INCLUDES *****************************************************************/
16 #include <internal/debug.h>
18 /* FUNCTIONS *****************************************************************/
23 VOID STDCALL
KeEnterCriticalRegion (VOID
)
25 DPRINT("KeEnterCriticalRegion()\n");
26 KeGetCurrentThread()->KernelApcDisable
--;
32 VOID STDCALL
KeLeaveCriticalRegion (VOID
)
34 PKTHREAD Thread
= KeGetCurrentThread();
36 DPRINT("KeLeaveCriticalRegion()\n");
38 /* Reference: http://www.ntfsd.org/archive/ntfsd0104/msg0203.html */
39 if(++Thread
->KernelApcDisable
== 0)
41 if (!IsListEmpty(&Thread
->ApcState
.ApcListHead
[KernelMode
]))
43 Thread
->ApcState
.KernelApcPending
= TRUE
;
44 HalRequestSoftwareInterrupt(APC_LEVEL
);