tasking: Check for null pointer first

This commit is contained in:
EnderIce2 2024-11-19 04:33:47 +02:00
parent 3709683af8
commit 4d192732cc
Signed by untrusted user who does not match committer: enderice2
GPG Key ID: EACC3AD603BAB4DD
3 changed files with 20 additions and 1 deletions

View File

@ -111,7 +111,10 @@ void KernelMainThread()
initProc = TaskManager->GetProcessByID(tid);
initThread = TaskManager->GetThreadByID(tid, initProc);
TaskManager->WaitForThread(initThread);
ExitCode = initThread->GetExitCode();
if (initThread)
ExitCode = initThread->GetExitCode();
else
ExitCode = 0xEBAD;
Exit:
KPrint("\x1b[31mUserspace process exited with code %d (%#x)",
ExitCode, ExitCode < 0 ? -ExitCode : ExitCode);

View File

@ -157,6 +157,9 @@ namespace Tasking::Scheduler
TCB *Custom::GetThreadByID(TID ID, PCB *Parent)
{
if (unlikely(Parent == nullptr))
return nullptr;
foreach (auto t in Parent->Threads)
{
if (t->ID == ID)
@ -544,6 +547,7 @@ namespace Tasking::Scheduler
{
if (pcb->State.load() == TaskState::Terminated)
{
debug("Found terminated process %s(%d)", pcb->Name, pcb->ID);
delete pcb;
continue;
}

View File

@ -105,6 +105,9 @@ namespace Tasking
void Task::WaitForProcess(PCB *pcb)
{
if (pcb == nullptr)
return;
if (pcb->State == TaskState::UnknownStatus)
return;
@ -119,6 +122,9 @@ namespace Tasking
void Task::WaitForThread(TCB *tcb)
{
if (tcb == nullptr)
return;
if (tcb->State == TaskState::UnknownStatus)
return;
@ -133,6 +139,9 @@ namespace Tasking
void Task::WaitForProcessStatus(PCB *pcb, TaskState status)
{
if (pcb == nullptr)
return;
if (pcb->State == TaskState::UnknownStatus)
return;
@ -145,6 +154,9 @@ namespace Tasking
void Task::WaitForThreadStatus(TCB *tcb, TaskState status)
{
if (tcb == nullptr)
return;
if (tcb->State == TaskState::UnknownStatus)
return;