From ad677bd1ed2c6d1a052d426117a4d20a0b59ac52 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Tue, 31 Dec 2024 16:50:34 +0100 Subject: FIX: CUSA and improved algorithm. Signed-off-by: Amlal El Mahrouss --- dev/Kernel/src/PEFCodeMgr.cc | 28 +++++++--------------------- 1 file changed, 7 insertions(+), 21 deletions(-) (limited to 'dev/Kernel/src/PEFCodeMgr.cc') diff --git a/dev/Kernel/src/PEFCodeMgr.cc b/dev/Kernel/src/PEFCodeMgr.cc index 63925c6c..17f7f895 100644 --- a/dev/Kernel/src/PEFCodeMgr.cc +++ b/dev/Kernel/src/PEFCodeMgr.cc @@ -246,38 +246,24 @@ namespace Kernel namespace Utils { - ProcessID rtl_create_process(PEFLoader& exec, const Int32& procKind) noexcept + ProcessID rtl_create_process(PEFLoader& exec, const Int32& process_kind) noexcept { auto errOrStart = exec.FindStart(); if (errOrStart.Error() != kErrorSuccess) return kProcessInvalidID; - UserProcess* proc = new UserProcess(); + UserThread process; - proc->Kind = procKind; - proc->Image.fCode = errOrStart.Leak().Leak(); - proc->Image.fBlob = exec.GetBlob().Leak().Leak(); - proc->StackSize = *(UIntPtr*)exec.FindSymbol(kPefStackSizeSymbol, kPefData); - proc->MemoryLimit = *(UIntPtr*)exec.FindSymbol(kPefHeapSizeSymbol, kPefData); - proc->PTime = 0UL; + auto id = UserProcessScheduler::The().Spawn(reinterpret_cast(exec.FindSymbol(kPefNameSymbol, kPefData)), errOrStart.Leak().Leak(), exec.GetBlob().Leak().Leak()); - rt_set_memory(proc->Name, 0, kProcessNameLen); - - if (exec.FindSymbol(kPefNameSymbol, kPefData)) - rt_copy_memory(exec.FindSymbol(kPefNameSymbol, kPefData), proc->Name, rt_string_len((Char*)exec.FindSymbol(kPefNameSymbol, kPefData))); - - if (!proc->StackSize) + if (id != kProcessInvalidID) { - const auto kDefaultStackSizeMib = 8; - proc->StackSize = mib_cast(kDefaultStackSizeMib); + UserProcessScheduler::The().CurrentTeam().AsArray()[id].Kind = process_kind; + UserProcessScheduler::The().CurrentTeam().AsArray()[id].StackSize = *(UIntPtr*)exec.FindSymbol(kPefStackSizeSymbol, kPefData); + UserProcessScheduler::The().CurrentTeam().AsArray()[id].MemoryLimit = *(UIntPtr*)exec.FindSymbol(kPefHeapSizeSymbol, kPefData); } - auto id = UserProcessScheduler::The().Spawn(proc); - - if (id == kProcessInvalidID) - delete proc; - return id; } } // namespace Utils -- cgit v1.2.3