diff options
| author | Amlal <amlal.elmahrouss@icloud.com> | 2024-10-30 06:55:35 +0100 |
|---|---|---|
| committer | Amlal <amlal.elmahrouss@icloud.com> | 2024-10-30 06:55:35 +0100 |
| commit | 8600ffcc1ddfc861e761baf2682490061a55cca8 (patch) | |
| tree | c51f0b4ce9fa8565c683be7209890c21ab09a99a /dev/ZKAKit/src/UserProcessScheduler.cc | |
| parent | 708400a70921055b06013f9b149449be64a7d585 (diff) | |
FIX: Scheduler should always check for a valid image, even for DLLs.
FIX: Fix ZBA modules btb files.
FIX: Don't put while statement on page allocation.
Signed-off-by: Amlal <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev/ZKAKit/src/UserProcessScheduler.cc')
| -rw-r--r-- | dev/ZKAKit/src/UserProcessScheduler.cc | 24 |
1 files changed, 9 insertions, 15 deletions
diff --git a/dev/ZKAKit/src/UserProcessScheduler.cc b/dev/ZKAKit/src/UserProcessScheduler.cc index dfa04537..61f6ba7b 100644 --- a/dev/ZKAKit/src/UserProcessScheduler.cc +++ b/dev/ZKAKit/src/UserProcessScheduler.cc @@ -320,7 +320,7 @@ namespace Kernel return -kErrorInvalidData; #ifdef __ZKA_AMD64__ - process.VMRegister = reinterpret_cast<UIntPtr>(HAL::mm_alloc_bitmap(Yes, Yes, sizeof(PDE), Yes)); + process.VMRegister = reinterpret_cast<UIntPtr>(mm_new_heap(sizeof(PDE), No, Yes)); #endif // __ZKA_AMD64__ process.StackFrame = reinterpret_cast<HAL::StackFramePtr>(mm_new_heap(sizeof(HAL::StackFrame), Yes, Yes)); @@ -339,16 +339,13 @@ namespace Kernel if (!process.Image) { - if (process.Kind != UserProcess::kExectuableDLLKind) - { - process.Crash(); - return -kErrorProcessFault; - } + process.Crash(); + return -kErrorProcessFault; } // Get preferred stack size by app. - const auto cMaxStackSize = process.StackSize; - process.StackReserve = reinterpret_cast<UInt8*>(mm_new_heap(sizeof(UInt8) * cMaxStackSize, Yes, Yes)); + const auto kMaxStackSize = process.StackSize; + process.StackReserve = reinterpret_cast<UInt8*>(mm_new_heap(sizeof(UInt8) * kMaxStackSize, Yes, Yes)); if (!process.StackReserve) { @@ -424,12 +421,14 @@ namespace Kernel SizeT process_index = 0; //! we store this guy to tell the scheduler how many //! things we have scheduled. - if (mTeam.mProcessAmount < 1) + if (mTeam.mProcessAmount == 0) { kcout << "UserProcessScheduler::Run(): This team doesn't have any process!\r"; return 0; } + kcout << "UserProcessScheduler::Run(): This team has process # " << number(mTeam.mProcessAmount) << endl; + for (; process_index < mTeam.AsArray().Capacity(); ++process_index) { auto& process = mTeam.AsArray()[process_index]; @@ -500,12 +499,7 @@ namespace Kernel process.Status == ProcessStatusKind::kDead) return No; - if (process.Status == ProcessStatusKind::kStarting && - process.Image) - return Yes; - - if (!process.Image && - process.Kind == UserProcess::kExectuableKind) + if (!process.Image) return No; return process.PTime < 1 && process.Status == ProcessStatusKind::kRunning; |
