diff options
| author | Amlal EL Mahrouss <amlalelmahrouss@icloud.com> | 2024-07-31 16:40:11 +0200 |
|---|---|---|
| committer | Amlal EL Mahrouss <amlalelmahrouss@icloud.com> | 2024-07-31 16:42:42 +0200 |
| commit | 63dc1384bcbf8caf4ca53c715628db2c36b0b096 (patch) | |
| tree | 2937e78fc2f0e729052660bdd1c74fdacf57d0ec /Kernel/Sources/ProcessScheduler.cxx | |
| parent | 59e0caa55e97f1a998904f404e5fedac3b2b0ec6 (diff) | |
[IMP] SEE BELOW.
- Support for shared libraries inside a process.
- SMP improvements, add the PROCESS_CONTROL_BLOCK, to handle task
switching.
- Add MUST_PASS in HardwareTimer class.
- Add rtl.internal.inl for SCM internal implementation.
Signed-off-by: Amlal EL Mahrouss <amlalelmahrouss@icloud.com>
Diffstat (limited to 'Kernel/Sources/ProcessScheduler.cxx')
| -rw-r--r-- | Kernel/Sources/ProcessScheduler.cxx | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/Kernel/Sources/ProcessScheduler.cxx b/Kernel/Sources/ProcessScheduler.cxx index 3301588a..94ae5fad 100644 --- a/Kernel/Sources/ProcessScheduler.cxx +++ b/Kernel/Sources/ProcessScheduler.cxx @@ -10,6 +10,7 @@ /***********************************************************************************/ #include <KernelKit/ProcessScheduler.hxx> +#include <KernelKit/PEFSharedObject.hxx> #include <KernelKit/MPManager.hpp> #include <KernelKit/Heap.hxx> #include <NewKit/String.hpp> @@ -193,6 +194,17 @@ namespace Kernel this->Image = nullptr; this->StackFrame = nullptr; + if (this->Kind == kShLibKind) + { + bool success = false; + rtl_fini_shared_object(this, this->SharedLibObjectPtr, &success); + + if (success) + { + this->SharedLibObjectPtr = nullptr; + } + } + ProcessScheduler::The().Leak().Remove(this->ProcessId); } @@ -217,11 +229,12 @@ namespace Kernel /// Create heap according to type of process. if (process.Leak().Kind == ProcessHeader::kAppKind) { - process.Leak().HeapPtr = rt_new_heap(kUserHeapUser | kUserHeapRw); + process.Leak().HeapPtr = sched_new_heap(kUserHeapUser | kUserHeapRw); } else if (process.Leak().Kind == ProcessHeader::kShLibKind) { - process.Leak().HeapPtr = rt_new_heap(kUserHeapUser | kUserHeapRw | kUserHeapShared); + process.Leak().SharedLibObjectPtr = rtl_init_shared_object(&process.Leak()); + process.Leak().HeapPtr = sched_new_heap(kUserHeapUser | kUserHeapRw | kUserHeapShared); } else { |
