summaryrefslogtreecommitdiffhomepage
path: root/dev/ZKA/Sources/UserProcessScheduler.cxx
diff options
context:
space:
mode:
authorAmlal <amlal@el-mahrouss-logic.com>2024-09-06 12:52:02 +0200
committerAmlal <amlal@el-mahrouss-logic.com>2024-09-06 12:52:02 +0200
commit39d95f7fb429c5c6b71cd7c1e985cadaf4ab7b83 (patch)
tree33e5832930b82adadfec61ad2e509e79995b7cf1 /dev/ZKA/Sources/UserProcessScheduler.cxx
parent1404bdfdbf767a7c8e445766af4c27fe17f7c205 (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.cxx22
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)
{