Check if CreateThread() has a valid parent

This commit is contained in:
Alex 2023-03-25 12:00:00 +02:00
parent 981534ea47
commit 2d03d629dc
Signed by untrusted user who does not match committer: enderice2
GPG Key ID: EACC3AD603BAB4DD

View File

@ -356,9 +356,9 @@ namespace Tasking
else else
Thread->Parent = Parent; Thread->Parent = Parent;
if (!Parent) if (InvalidPCB(Parent))
{ {
error("Parent is null"); error("Parent is invalid");
delete Thread; delete Thread;
return nullptr; return nullptr;
} }
@ -434,9 +434,6 @@ namespace Tasking
Thread->Registers.cs = GDT_USER_CODE; Thread->Registers.cs = GDT_USER_CODE;
Thread->Registers.ss = GDT_USER_DATA; Thread->Registers.ss = GDT_USER_DATA;
Thread->Registers.rflags.AlwaysOne = 1; Thread->Registers.rflags.AlwaysOne = 1;
// Thread->Registers.rflags.PF = 1;
// Thread->Registers.rflags.SF = 1;
// Thread->Registers.rflags.IOPL = 3;
Thread->Registers.rflags.IF = 1; Thread->Registers.rflags.IF = 1;
Thread->Registers.rflags.ID = 1; Thread->Registers.rflags.ID = 1;
Thread->Registers.rsp = ((uintptr_t)Thread->Stack->GetStackTop()); Thread->Registers.rsp = ((uintptr_t)Thread->Stack->GetStackTop());
@ -842,6 +839,23 @@ namespace Tasking
debug("Destructor called"); debug("Destructor called");
SmartLock(TaskingLock); SmartLock(TaskingLock);
trace("Stopping tasking"); trace("Stopping tasking");
/*size_t ExpectedToBeTerminated = 0;
foreach (PCB *Process in ListProcess)
{
foreach (TCB *Thread in Process->Threads)
{
if (Thread == GetCurrentCPU()->CurrentThread.Load())
continue;
this->KillThread(Thread, 0xFFFF);
ExpectedToBeTerminated++;
}
if (Process == GetCurrentCPU()->CurrentProcess.Load())
continue;
this->KillProcess(Process, 0xFFFF);
ExpectedToBeTerminated++;
}*/
foreach (PCB *Process in ListProcess) foreach (PCB *Process in ListProcess)
{ {
foreach (TCB *Thread in Process->Threads) foreach (TCB *Thread in Process->Threads)
@ -863,7 +877,7 @@ namespace Tasking
continue; continue;
NotTerminated++; NotTerminated++;
} }
if (NotTerminated == 0) if (NotTerminated == 0 /*1*/)
break; break;
TaskingScheduler_OneShot(100); TaskingScheduler_OneShot(100);
} }