scheduler: fix issue with threads being lost

This commit is contained in:
Matheus
2024-09-09 21:22:19 -03:00
parent caec7d4daa
commit c086b9625a
2 changed files with 5 additions and 0 deletions
+1
View File
@@ -114,6 +114,7 @@ void semaphore_signal(semaphore_t *sem) {
// wake SOMEONE up. this will *try* to wake up a thread
// it could wake up none though, as a thread could have been interrupted by a signal
thread = get(sem);
// TODO this is broken
// XXX the current method doesn't respect thread priorities
if (thread) {
sched_wakeup(thread, 0);
+4
View File
@@ -546,7 +546,11 @@ static void yield(context_t *context, void *) {
if (sleeping && (thread->shouldexit || gotsignal) && (thread->flags & SCHED_THREAD_FLAGS_INTERRUPTIBLE)) {
sleeping = false;
if (next)
runqueueinsert(next);
next = NULL;
thread->flags &= ~(SCHED_THREAD_FLAGS_SLEEP | SCHED_THREAD_FLAGS_INTERRUPTIBLE);
thread->wakeupreason = SCHED_WAKEUP_REASON_INTERRUPTED;
spinlock_release(&thread->sleeplock);