mirror of
https://github.com/Fennix-Project/Kernel.git
synced 2025-05-28 15:34:33 +00:00
Check if CreateThread() has a valid parent
This commit is contained in:
parent
981534ea47
commit
2d03d629dc
@ -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);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user