summaryrefslogtreecommitdiffhomepage
path: root/dev/ZKA/Sources/UserProcessScheduler.cxx
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-09-05 19:53:08 +0200
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-09-05 19:53:40 +0200
commit3b60a1e87ab02a1b72d8bb9f7392780899d5a0d7 (patch)
tree438f1337c0eb2ae83cf3d409c29848d396be08b2 /dev/ZKA/Sources/UserProcessScheduler.cxx
parent432e68391357423914547a7b34311258d7598808 (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.cxx23
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);