diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-11-21 20:50:22 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-11-21 20:50:22 +0100 |
| commit | 47a0e9b901e9e51b3f0ee5dd30d52ff1a5c8fcc0 (patch) | |
| tree | 1c2e86bd4313bb40dfa3e70e7e31a8be71bf0c61 /dev/ZKAKit/src/UserProcessScheduler.cc | |
| parent | d5397d2f3be6f3de742736e5d1fdfc3121879f70 (diff) | |
IMP: Compile using -Wall and scheduler improvements.
Diffstat (limited to 'dev/ZKAKit/src/UserProcessScheduler.cc')
| -rw-r--r-- | dev/ZKAKit/src/UserProcessScheduler.cc | 41 |
1 files changed, 20 insertions, 21 deletions
diff --git a/dev/ZKAKit/src/UserProcessScheduler.cc b/dev/ZKAKit/src/UserProcessScheduler.cc index eb754ade..b96fd6a8 100644 --- a/dev/ZKAKit/src/UserProcessScheduler.cc +++ b/dev/ZKAKit/src/UserProcessScheduler.cc @@ -40,7 +40,7 @@ namespace Kernel STATIC UserProcessScheduler kProcessScheduler; - UserProcess::UserProcess() = default; + UserProcess::UserProcess() = default; UserProcess::~UserProcess() = default; /// @brief Gets the last exit code. @@ -133,7 +133,7 @@ namespace Kernel } else { - UserProcessHeapList* entry = this->MemoryHeap; + UserProcessHeapList* entry = this->MemoryHeap; UserProcessHeapList* prev_entry = nullptr; while (!entry) @@ -235,32 +235,29 @@ namespace Kernel void UserProcess::Exit(const Int32& exit_code) { - if (exit_code > 0) - this->Status = ProcessStatusKind::kKilled; - else - this->Status = ProcessStatusKind::kDead; + this->Status = exit_code > 0 ? ProcessStatusKind::kKilled : ProcessStatusKind::KFinishing; + this->fLastExitCode = exit_code; - fLastExitCode = exit_code; kLastExitCode = exit_code; auto memory_list = this->MemoryHeap; +#ifdef __ZKA_AMD64__ + auto pd = hal_read_cr3(); + hal_write_cr3(this->VMRegister); +#endif + // Deleting memory lists. Make sure to free all of them. while (memory_list) { if (memory_list->MemoryEntry) { -#ifdef __ZKA_AMD64__ - auto pd = hal_read_cr3(); - hal_write_cr3(this->VMRegister); -#endif - MUST_PASS(mm_delete_heap(memory_list->MemoryEntry)); + } #ifdef __ZKA_AMD64__ - hal_write_cr3(pd); + hal_write_cr3(pd); #endif - } auto next = memory_list->MemoryNext; @@ -283,14 +280,14 @@ namespace Kernel if (this->StackFrame && mm_is_valid_heap(this->StackFrame)) mm_delete_heap((VoidPtr)this->StackFrame); - this->Image.fBlob = nullptr; - this->Image.fCode = nullptr; - this->StackFrame = nullptr; + this->Image.fBlob = nullptr; + this->Image.fCode = nullptr; + this->StackFrame = nullptr; if (this->Kind == kExectuableDLLKind) { Bool success = false; - + rtl_fini_dll(this, reinterpret_cast<IPEFDLLObject*>(this->PefDLLDelegate), &success); if (!success) @@ -305,6 +302,8 @@ namespace Kernel mm_delete_heap(reinterpret_cast<VoidPtr>(this->StackReserve)); this->ProcessId = 0; + + this->Status = ProcessStatusKind::kFinished; } /***********************************************************************************/ @@ -430,7 +429,7 @@ namespace Kernel /***********************************************************************************/ /// @brief Run User scheduler object. - /// @return Process executed within team. + /// @return Process count executed within a team. /***********************************************************************************/ @@ -511,7 +510,7 @@ namespace Kernel Bool UserProcessHelper::CanBeScheduled(const UserProcess& process) { if (process.Status == ProcessStatusKind::kKilled || - process.Status == ProcessStatusKind::kDead || + process.Status == ProcessStatusKind::kFinished || process.Status == ProcessStatusKind::kFrozen) return No; @@ -533,7 +532,7 @@ namespace Kernel { return kProcessScheduler.Run(); } - + /***********************************************************************************/ /** * \brief Does a context switch in a CPU. |
