From e0b8afceb1f40e5400f2c105b76e8eed373f7687 Mon Sep 17 00:00:00 2001 From: jewelcodes Date: Tue, 19 Nov 2024 21:22:08 -0500 Subject: [PATCH] sched: check thread exit status when signals are raised --- src/sched/sched.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/sched/sched.c b/src/sched/sched.c index 2d5309ac..20257183 100644 --- a/src/sched/sched.c +++ b/src/sched/sched.c @@ -355,11 +355,15 @@ void schedule() { current->status = THREAD_QUEUED; signalHandle(t); - t->status = THREAD_RUNNING; - t->time = schedTimeslice(t, t->priority); - t->cpu = cpu; - releaseLock(&lock); - platformSwitchContext(t); + + if(t->status == THREAD_QUEUED) { + // check status again because the signal handler may terminate a thread + t->status = THREAD_RUNNING; + t->time = schedTimeslice(t, t->priority); + t->cpu = cpu; + releaseLock(&lock); + platformSwitchContext(t); + } } t = t->next;