diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-09-05 19:53:08 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-09-05 19:53:40 +0200 |
| commit | 3b60a1e87ab02a1b72d8bb9f7392780899d5a0d7 (patch) | |
| tree | 438f1337c0eb2ae83cf3d409c29848d396be08b2 /dev/ZKA/Sources/UserProcessScheduler.cxx | |
| parent | 432e68391357423914547a7b34311258d7598808 (diff) | |
[ IMP ] HPFS EBS and NeFS overhaul.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev/ZKA/Sources/UserProcessScheduler.cxx')
| -rw-r--r-- | dev/ZKA/Sources/UserProcessScheduler.cxx | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/dev/ZKA/Sources/UserProcessScheduler.cxx b/dev/ZKA/Sources/UserProcessScheduler.cxx index 4e0c8902..8c46b1cf 100644 --- a/dev/ZKA/Sources/UserProcessScheduler.cxx +++ b/dev/ZKA/Sources/UserProcessScheduler.cxx @@ -2,6 +2,9 @@ Copyright ZKA Technologies. + FILE: UserProcessScheduler.cxx + PURPOSE: User sided process scheduler. + ------------------------------------------- */ /***********************************************************************************/ @@ -34,7 +37,7 @@ namespace Kernel /// @brief User Process scheduler global object. /***********************************************************************************/ - STATIC UserProcessScheduler* cProcessScheduler = nullptr; + UserProcessScheduler* cProcessScheduler = nullptr; /// @brief Gets the last exit code. /// @note Not thread-safe. @@ -264,6 +267,7 @@ namespace Kernel { if (process.Kind != UserProcess::kDLLKind) { + process.Crash(); return -kErrorProcessFault; } } @@ -273,6 +277,9 @@ namespace Kernel ++mTeam.mProcessAmount; + while (1) + ; + mTeam.AsArray()[process.ProcessId] = process; return process.ProcessId; @@ -297,7 +304,7 @@ namespace Kernel // check if process is within range. if (process_id > mTeam.AsArray().Count()) return false; - + mTeam.AsArray()[process_id].Status = ProcessStatusKind::kDead; --mTeam.mProcessAmount; @@ -373,10 +380,12 @@ namespace Kernel Void UserProcessHelper::Init() { - if (!cProcessScheduler) - { - cProcessScheduler = new UserProcessScheduler(); - } + if (mm_is_valid_heap(cProcessScheduler)) + delete cProcessScheduler; + + cProcessScheduler = nullptr; + cProcessScheduler = new UserProcessScheduler(); + MUST_PASS(cProcessScheduler); } /// @brief Check if process can be schedulded. @@ -435,7 +444,7 @@ namespace Kernel HardwareThreadScheduler::The()[index].Leak()->Kind() != ThreadKind::kHartSystemReserved) { - PID prev_pid = UserProcessHelper::TheCurrentPID(); + PID prev_pid = UserProcessHelper::TheCurrentPID(); UserProcessHelper::TheCurrentPID() = new_pid; bool ret = HardwareThreadScheduler::The()[index].Leak()->Switch(image_ptr, stack, frame_ptr); |
