summaryrefslogtreecommitdiffhomepage
path: root/dev/Kernel/src/HardwareThreadScheduler.cc
diff options
context:
space:
mode:
Diffstat (limited to 'dev/Kernel/src/HardwareThreadScheduler.cc')
-rw-r--r--dev/Kernel/src/HardwareThreadScheduler.cc6
1 files changed, 5 insertions, 1 deletions
diff --git a/dev/Kernel/src/HardwareThreadScheduler.cc b/dev/Kernel/src/HardwareThreadScheduler.cc
index 66500f73..573b86d6 100644
--- a/dev/Kernel/src/HardwareThreadScheduler.cc
+++ b/dev/Kernel/src/HardwareThreadScheduler.cc
@@ -62,8 +62,9 @@ namespace Kernel
Bool HardwareThread::IsBusy() noexcept
{
STATIC Int64 busy_timer = 0U;
+ STATIC Int64 timeout_max = 0x1000000; // an arbitrary value used to tell if the timeout hasn't been reached yet.
- if (fBusy && busy_timer > this->fPTime)
+ if (fBusy && busy_timer > timeout_max)
{
busy_timer = 0U;
fBusy = No;
@@ -111,6 +112,9 @@ namespace Kernel
/***********************************************************************************/
Bool HardwareThread::Switch(VoidPtr image_ptr, Ptr8 stack_ptr, HAL::StackFramePtr frame, const ThreadID& pid)
{
+ if (this->IsBusy())
+ return NO;
+
this->fStack = frame;
this->fSourcePID = pid;