diff options
| author | Amlal <amlal@el-mahrouss-logic.com> | 2024-09-06 12:52:02 +0200 |
|---|---|---|
| committer | Amlal <amlal@el-mahrouss-logic.com> | 2024-09-06 12:52:02 +0200 |
| commit | 39d95f7fb429c5c6b71cd7c1e985cadaf4ab7b83 (patch) | |
| tree | 33e5832930b82adadfec61ad2e509e79995b7cf1 /dev/ZKA/Sources/UserProcessScheduler.cxx | |
| parent | 1404bdfdbf767a7c8e445766af4c27fe17f7c205 (diff) | |
[ IMP ] Fixed Scheduler and Team object, also fixed other things.
Signed-off-by: Amlal <amlal@el-mahrouss-logic.com>
Diffstat (limited to 'dev/ZKA/Sources/UserProcessScheduler.cxx')
| -rw-r--r-- | dev/ZKA/Sources/UserProcessScheduler.cxx | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/dev/ZKA/Sources/UserProcessScheduler.cxx b/dev/ZKA/Sources/UserProcessScheduler.cxx index f480bccc..c68104b9 100644 --- a/dev/ZKA/Sources/UserProcessScheduler.cxx +++ b/dev/ZKA/Sources/UserProcessScheduler.cxx @@ -54,7 +54,7 @@ namespace Kernel Void UserProcess::Crash() { - if (this->Name == 0) + if (*this->Name == 0) return; kcout << this->Name << ": crashed, ID = " << number(kErrorProcessFault) << endl; @@ -202,10 +202,10 @@ namespace Kernel cLastExitCode = exit_code; //! Delete image if not done already. - if (this->Image) + if (this->Image && mm_is_valid_heap(this->Image)) mm_delete_ke_heap(this->Image); - if (this->StackFrame) + if (this->StackFrame && mm_is_valid_heap(this->StackFrame)) mm_delete_ke_heap((VoidPtr)this->StackFrame); this->Image = nullptr; @@ -225,6 +225,8 @@ namespace Kernel if (this->StackReserve) delete[] this->StackReserve; + this->ProcessId = 0; + if (this->ProcessId > 0) UserProcessScheduler::The().Remove(this->ProcessId); } @@ -271,11 +273,14 @@ namespace Kernel return -kErrorProcessFault; } - process.Status = ProcessStatusKind::kStarting; - process.ProcessId = mTeam.mProcessAmount; + if (mTeam.mProcessAmount > kSchedProcessLimitPerTeam) + mTeam.mProcessAmount = 0UL; ++mTeam.mProcessAmount; + process.ProcessId = mTeam.mProcessAmount; + process.Status = ProcessStatusKind::kStarting; + mTeam.AsArray()[process.ProcessId] = process; return process.ProcessId; @@ -414,10 +419,13 @@ namespace Kernel * \param new_pid the process's PID. */ - bool UserProcessHelper::Switch(VoidPtr image_ptr, UInt8* stack, HAL::StackFramePtr frame_ptr, const PID& new_pid) + Bool UserProcessHelper::Switch(VoidPtr image_ptr, UInt8* stack, HAL::StackFramePtr frame_ptr, const PID& new_pid) { if (!stack || !frame_ptr || !image_ptr || new_pid < 0) - return false; + return No; + + while (Yes) + ; for (SizeT index = 0UL; index < HardwareThreadScheduler::The().Count(); ++index) { |
