summaryrefslogtreecommitdiffhomepage
path: root/dev/ZKAKit/src/UserProcessScheduler.cc
diff options
context:
space:
mode:
Diffstat (limited to 'dev/ZKAKit/src/UserProcessScheduler.cc')
-rw-r--r--dev/ZKAKit/src/UserProcessScheduler.cc45
1 files changed, 15 insertions, 30 deletions
diff --git a/dev/ZKAKit/src/UserProcessScheduler.cc b/dev/ZKAKit/src/UserProcessScheduler.cc
index 8694b449..79e07385 100644
--- a/dev/ZKAKit/src/UserProcessScheduler.cc
+++ b/dev/ZKAKit/src/UserProcessScheduler.cc
@@ -40,11 +40,7 @@ namespace Kernel
STATIC UserProcessScheduler kProcessScheduler;
- UserProcess::UserProcess(VoidPtr start_image)
- : Code(start_image)
- {
- }
-
+ UserProcess::UserProcess() = default;
UserProcess::~UserProcess() = default;
/// @brief Gets the last exit code.
@@ -278,23 +274,24 @@ namespace Kernel
HAL::mm_free_bitmap(this->VMRegister);
//! Delete image if not done already.
- if (this->Code && mm_is_valid_heap(this->Code))
- mm_delete_heap(this->Code);
+ if (this->Image.fCode && mm_is_valid_heap(this->Image.fCode))
+ mm_delete_heap(this->Image.fCode);
- if (this->ExecImg && mm_is_valid_heap(this->ExecImg))
- mm_delete_heap(this->ExecImg);
+ if (this->Image.fBlob && mm_is_valid_heap(this->Image.fBlob))
+ mm_delete_heap(this->Image.fBlob);
if (this->StackFrame && mm_is_valid_heap(this->StackFrame))
mm_delete_heap((VoidPtr)this->StackFrame);
- this->ExecImg = nullptr;
- this->Code = nullptr;
+ this->Image.fBlob = nullptr;
+ this->Image.fCode = nullptr;
this->StackFrame = nullptr;
if (this->Kind == kExectuableDLLKind)
{
Bool success = false;
- rtl_fini_dll(this, this->PefDLLDelegate, &success);
+
+ rtl_fini_dll(this, reinterpret_cast<IPEFDLLObject*>(this->PefDLLDelegate), &success);
if (!success)
{
@@ -318,10 +315,10 @@ namespace Kernel
ProcessID UserProcessScheduler::Spawn(UserProcess* process)
{
- if (*process->Name == 0)
+ if (!process ||
+ *process->Name == 0)
{
- Char process_name[] = "Process (Unnamed)";
- rt_copy_memory((VoidPtr)process_name, process->Name, rt_string_len(process_name));
+ return kProcessInvalidID;
}
#ifdef __ZKA_AMD64__
@@ -391,7 +388,6 @@ namespace Kernel
UserProcessScheduler& UserProcessScheduler::The()
{
- kcout << "Return user scheduler object.\r";
return kProcessScheduler;
}
@@ -466,7 +462,7 @@ namespace Kernel
kcout << "Switch to '" << process.Name << "'.\r";
// tell helper to find a core to schedule on.
- if (!UserProcessHelper::Switch(process.Code, &process.StackReserve[process.StackSize - 1], process.StackFrame,
+ if (!UserProcessHelper::Switch(process.Image.fCode, &process.StackReserve[process.StackSize - 1], process.StackFrame,
process.ProcessId))
{
process.Crash();
@@ -522,7 +518,7 @@ namespace Kernel
if (process.Status == ProcessStatusKind::kInvalid)
return No;
- if (!process.Code)
+ if (!process.Image.fCode)
return No;
return process.PTime < 1;
@@ -537,17 +533,7 @@ namespace Kernel
{
return kProcessScheduler.Run();
}
-
- /***********************************************************************************/
- /**
- * @brief Initializes the scheduler.
- */
- /***********************************************************************************/
- Void UserProcessHelper::InitScheduler()
- {
- /// TODO: code to init scheduler here.
- }
-
+
/***********************************************************************************/
/**
* \brief Does a context switch in a CPU.
@@ -588,7 +574,6 @@ namespace Kernel
////////////////////////////////////////////////////////////
/// Rollback on fail. ///
////////////////////////////////////////////////////////////
- ///
if (!ret)
{
HardwareThreadScheduler::The()[index].Leak()->fPTime = prev_ptime;