From 42b130bfe05a9af074e08992b2250085e2a6f00a Mon Sep 17 00:00:00 2001 From: Matheus Date: Mon, 3 Jul 2023 22:56:23 -0300 Subject: [PATCH] kernel: new event abstraction --- kernel-src/include/event.h | 12 ++++++++++++ kernel-src/lib/event.c | 19 +++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 kernel-src/include/event.h create mode 100644 kernel-src/lib/event.c diff --git a/kernel-src/include/event.h b/kernel-src/include/event.h new file mode 100644 index 00000000..9eccebb3 --- /dev/null +++ b/kernel-src/include/event.h @@ -0,0 +1,12 @@ +#ifndef _EVENT_H +#define _EVENT_H + +#include +typedef semaphore_t event_t; + +int event_wait(event_t *event, bool interruptible); +void event_signal(event_t *event); + +#define EVENT_INIT(x) SEMAPHORE_INIT(x, 0); + +#endif diff --git a/kernel-src/lib/event.c b/kernel-src/lib/event.c new file mode 100644 index 00000000..9308dfac --- /dev/null +++ b/kernel-src/lib/event.c @@ -0,0 +1,19 @@ +#include + +// TODO while this works, it is built upon semaphores and might have some race conditions + +int event_wait(event_t *event, bool interruptible) { + int e = semaphore_wait(event, interruptible); + if (e) + return e; + + if (semaphore_haswaiters(event)) + semaphore_signal(event); + + return 0; +} + +void event_signal(event_t *event) { + if (semaphore_haswaiters(event)) + semaphore_signal(event); +}