diff --git a/kernel-src/include/kernel/scheduler.h b/kernel-src/include/kernel/scheduler.h index d5c12a0e..8e0c29af 100644 --- a/kernel-src/include/kernel/scheduler.h +++ b/kernel-src/include/kernel/scheduler.h @@ -16,6 +16,9 @@ #define SCHED_PROC_STATE_NORMAL 0 #define SCHED_PROC_STATE_ZOMBIE 1 +#define SCHED_WAKEUP_REASON_NORMAL 0 +#define SCHED_WAKEUP_REASON_INTERRUPTED -1 + #define STACK_TOP (void *)0x0000800000000000 #define INTERP_BASE (void *)0x00000beef0000000 diff --git a/kernel-src/io/keyboard.c b/kernel-src/io/keyboard.c index 730d0c9e..f2cb6e39 100644 --- a/kernel-src/io/keyboard.c +++ b/kernel-src/io/keyboard.c @@ -113,7 +113,7 @@ void keyboard_sendpacket(keyboard_t *kb, kbpacket_t *packet) { int keyboard_wait(keyboard_t *kb, kbpacket_t *packet) { int e = semaphore_wait(&kb->semaphore, true); - if (e == EINTR) + if (e == SCHED_WAKEUP_REASON_INTERRUPTED) return e; long ipl = interrupt_raiseipl(IPL_KEYBOARD); diff --git a/kernel-src/sys/scheduler.c b/kernel-src/sys/scheduler.c index 30dfd9df..cbeaffbb 100644 --- a/kernel-src/sys/scheduler.c +++ b/kernel-src/sys/scheduler.c @@ -296,7 +296,7 @@ void sched_wakeup(thread_t *thread, int reason) { bool intstate = interrupt_set(false); spinlock_acquire(&thread->sleeplock); - if ((thread->flags & SCHED_THREAD_FLAGS_SLEEP) == 0 || (reason == EINTR && (thread->flags & SCHED_THREAD_FLAGS_INTERRUPTIBLE) == 0)) { + if ((thread->flags & SCHED_THREAD_FLAGS_SLEEP) == 0 || ((reason == SCHED_WAKEUP_REASON_INTERRUPTED) && (thread->flags & SCHED_THREAD_FLAGS_INTERRUPTIBLE) == 0)) { spinlock_release(&thread->sleeplock); interrupt_set(intstate); return;