2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * FILE: ntoskrnl/ke/event.c
5 * PURPOSE: Implements event
6 * PROGRAMMER: David Welch (welch@mcmail.com)
11 /* INCLUDES *****************************************************************/
13 #include <internal/kernel.h>
14 #include <internal/wait.h>
16 #include <ddk/ntddk.h>
18 #include <internal/debug.h>
20 /* FUNCTIONS ****************************************************************/
22 VOID
KeClearEvent(PKEVENT Event
)
24 Event
->Header
.SignalState
=FALSE
; // (??) Is this atomic
27 VOID
KeInitializeEvent(PKEVENT Event
, EVENT_TYPE Type
, BOOLEAN State
)
29 Event
->Header
.Type
= Type
;
30 Event
->Header
.Absolute
= 0;
31 Event
->Header
.Inserted
= 0;
32 Event
->Header
.Size
= sizeof(KEVENT
) / sizeof(ULONG
);
33 Event
->Header
.SignalState
= State
;
34 InitializeListHead(&(Event
->Header
.WaitListHead
));
37 LONG
KeReadStateEvent(PKEVENT Event
)
39 return(Event
->Header
.SignalState
);
42 LONG
KeResetEvent(PKEVENT Event
)
44 return(InterlockedExchange(&(Event
->Header
.SignalState
),0));
47 LONG
KeSetEvent(PKEVENT Event
, KPRIORITY Increment
, BOOLEAN Wait
)
52 KeAcquireSpinLock(&DispatcherDatabaseLock
,&oldlvl
);
53 ret
= InterlockedExchange(&(Event
->Header
.SignalState
),1);
54 KeDispatcherObjectWake((DISPATCHER_HEADER
*)Event
);
55 KeReleaseSpinLock(&DispatcherDatabaseLock
,oldlvl
);