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.cc13
1 files changed, 8 insertions, 5 deletions
diff --git a/dev/kernel/src/HardwareThreadScheduler.cc b/dev/kernel/src/HardwareThreadScheduler.cc
index 23365af5..78bad9d6 100644
--- a/dev/kernel/src/HardwareThreadScheduler.cc
+++ b/dev/kernel/src/HardwareThreadScheduler.cc
@@ -92,11 +92,16 @@ Void HardwareThread::Wake(const bool wakeup) noexcept {
/// @retval false stack is invalid, previous code is running.
/***********************************************************************************/
Bool HardwareThread::Switch(HAL::StackFramePtr frame) {
- this->fStack = frame;
+ if (!frame) {
+ return NO;
+ }
- Bool ret = mp_register_task(fStack, this->fPID);
+ if (!hal_check_stack(frame)) {
+ return NO;
+ }
- return ret;
+ this->fStack = frame;
+ return mp_register_task(fStack, this->fID);
}
/***********************************************************************************/
@@ -145,8 +150,6 @@ Ref<HardwareThread*> HardwareThreadScheduler::operator[](SizeT idx) {
return {kFakeThread};
}
- fThreadList[idx].fPID = idx;
-
return &fThreadList[idx];
}