Lifecycle management of threads #29

Merged
harraiken merged 240 commits from threads into master 2026-09-07 13:45:09 +02:00
3 changed files with 17 additions and 4 deletions
Showing only changes of commit f680830b53 - Show all commits

View File

@@ -82,7 +82,8 @@ KE::KProcess::InitializeIdleProcess(IN OUT PKPROCESS Process,
Status = MM::Allocator::AllocatePool(NonPagedPool, MapSize, (PVOID*)&Process->ActiveProcessors);
if(Status != STATUS_SUCCESS)
{
/* Memory allocation failed, return the status code */
/* Memory allocation failed, free previously allocated memory and return the status code */
MM::Allocator::FreePool((PVOID)Process->Affinity);
return Status;
}

View File

@@ -75,7 +75,8 @@ KE::KThread::InitializeIdleThread(IN PKPROCESS IdleProcess,
Status = MM::Allocator::AllocatePool(NonPagedPool, MapSize, (PVOID*)&IdleThread->UserAffinity);
if(Status != STATUS_SUCCESS)
{
/* Memory allocation failed, return the status code */
/* Memory allocation failed, free previously allocated memory and return the status code */
MM::Allocator::FreePool((PVOID)IdleThread->Affinity);
return Status;
}
@@ -88,7 +89,9 @@ KE::KThread::InitializeIdleThread(IN PKPROCESS IdleProcess,
NULLPTR, NULLPTR, Stack, TRUE);
if(Status != STATUS_SUCCESS)
{
/* Failed to initialize IDLE thread, return status code */
/* Failed to initialize IDLE thread, free both affinity maps and return the status code */
MM::Allocator::FreePool((PVOID)IdleThread->Affinity);
MM::Allocator::FreePool((PVOID)IdleThread->UserAffinity);
return Status;
}

View File

@@ -50,5 +50,14 @@ PS::Thread::CreateIdleThread(IN PKPROCESSOR_CONTROL_BLOCK Prcb,
Prcb->IdleThread = &IdleThread->ThreadControlBlock;
/* Initialize the IDLE thread */
return KE::KThread::InitializeIdleThread(IdleProcess, &IdleThread->ThreadControlBlock, Prcb, Stack);
Status = KE::KThread::InitializeIdleThread(IdleProcess, &IdleThread->ThreadControlBlock, Prcb, Stack);
if(Status != STATUS_SUCCESS)
{
/* Failed to initialize the IDLE thread state, free the ETHREAD object and return the status code */
MM::Allocator::FreePool((PVOID)IdleThread);
return Status;
}
/* Return success */
return STATUS_SUCCESS;
}