From 86d28d968325a7179f407f43ae3575c5b08cf44c Mon Sep 17 00:00:00 2001 From: Baptiste Wicht Date: Tue, 9 Aug 2016 22:29:26 +0200 Subject: [PATCH] Fix race condition --- kernel/src/scheduler.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/kernel/src/scheduler.cpp b/kernel/src/scheduler.cpp index 5e432201..de2cb665 100644 --- a/kernel/src/scheduler.cpp +++ b/kernel/src/scheduler.cpp @@ -874,15 +874,17 @@ void scheduler::sleep_ms(pid_t pid, size_t time){ thor_assert(pid < scheduler::MAX_PROCESS, "pid out of bounds"); thor_assert(pcb[pid].state == process_state::RUNNING, "Only RUNNING processes can sleep"); - logging::logf(logging::log_level::DEBUG, "Put %u to sleep\n", pid); - - pcb[pid].state = process_state::SLEEPING; - // Compute the amount of ticks to sleep auto sleep_ticks = time * (timer::frequency() / 1000); sleep_ticks = !sleep_ticks ? 1 : sleep_ticks; - pcb[pid].sleep_timeout = sleep_ticks; + logging::logf(logging::log_level::DEBUG, "Put %u to sleep for %u ticks\n", pid, sleep_ticks); + + // Put the process to sleep + pcb[pid].sleep_timeout = sleep_ticks; + pcb[pid].state = process_state::SLEEPING; + + // Run another process reschedule(); }