diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-07-09 20:51:20 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-07-09 20:52:00 +0200 |
| commit | dfaf137915094e7ba72f7d7f1f57dc5158d1b6ab (patch) | |
| tree | 802a5bf263d606b59bb52d5e7434a04c8644d07e /Kernel/Sources/ProcessScheduler.cxx | |
| parent | 891245c6c9a78cea6074e336d1b04a2264b2fcce (diff) | |
MHR-36: A set of major fixes for bootloader and kernel alongside new
implementations.
- Implement realloc for kernel scheduler improvements.
- Fixed readAll on bootloader's BFileReader.
- Add resources for zeta installation.
- Add STB header.
- Process Heap which replaced the previous User Heap.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'Kernel/Sources/ProcessScheduler.cxx')
| -rw-r--r-- | Kernel/Sources/ProcessScheduler.cxx | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/Kernel/Sources/ProcessScheduler.cxx b/Kernel/Sources/ProcessScheduler.cxx index 98851d41..f8330ae8 100644 --- a/Kernel/Sources/ProcessScheduler.cxx +++ b/Kernel/Sources/ProcessScheduler.cxx @@ -206,15 +206,23 @@ namespace Kernel if (mTeam.AsArray().Count() > kSchedProcessLimitPerTeam) return -kErrorOutOfTeamSlot; - kcout << "ProcessScheduler::Add(Ref<ProcessHeader>& process)\r"; + kcout << "ProcessScheduler:: adding process to team...\r"; /// Create heap according to type of process. if (process.Leak().Kind == ProcessHeader::kAppKind) + { process.Leak().HeapPtr = rt_new_heap(kUserHeapUser | kUserHeapRw); + } else if (process.Leak().Kind == ProcessHeader::kShLibKind) + { process.Leak().HeapPtr = rt_new_heap(kUserHeapUser | kUserHeapRw | kUserHeapShared); + } else - process.Leak().HeapPtr = rt_new_heap(kUserHeapDriver | kUserHeapRw); + { + // something went wrong, do not continue, process kind is incorrect. + process.Leak().Crash(); + return -kErrorProcessFault; + } process.Leak().StackFrame = reinterpret_cast<HAL::StackFrame*>( ke_new_ke_heap(sizeof(HAL::StackFrame), true, false)); @@ -226,22 +234,28 @@ namespace Kernel process.Leak().ProcessId = (mTeam.AsArray().Count() - 1); process.Leak().HeapCursor = process.Leak().HeapPtr; - mTeam.AsArray().Add(process); + MUST_PASS(mTeam.AsArray().Add(process)); - return mTeam.AsArray().Count() - 1; + return (mTeam.AsArray().Count() - 1); } /// @brief Remove process from list. - /// @param process - /// @return - bool ProcessScheduler::Remove(SizeT process) + /// @param processSlot process slot inside team. + /// @retval true process was removed. + /// @retval false process doesn't exist in team. + Bool ProcessScheduler::Remove(SizeT processSlot) { - if (process > mTeam.AsArray().Count()) + // check if process is within range. + if (processSlot > mTeam.AsArray().Count()) + return false; + + // also check if the process isn't a dummy one. + if (mTeam.AsArray()[processSlot].Leak().Leak().Image == nullptr) return false; - kcout << "ProcessScheduler::Remove(SizeT process)\r"; + kcout << "ProcessScheduler: removing process\r"; - return mTeam.AsArray().Remove(process); + return mTeam.AsArray().Remove(processSlot); } /// @brief Run scheduler. |
