hle: kernel: KThread: Improve Increment/Decrement RunningThreadCount.

- Previously implementation was incorrect, and would occasionally underflow.
This commit is contained in:
bunnei 2022-01-22 21:09:45 -08:00
parent 5b57ee66ce
commit 59add00d4a
3 changed files with 21 additions and 24 deletions

View file

@ -215,7 +215,6 @@ ResultCode KThread::Initialize(KThreadFunction func, uintptr_t arg, VAddr user_s
parent = owner;
parent->Open();
parent->IncrementThreadCount();
}
// Initialize thread context.
@ -327,11 +326,6 @@ void KThread::Finalize() {
}
}
// Decrement the parent process's thread count.
if (parent != nullptr) {
parent->DecrementThreadCount();
}
// Perform inherited finalization.
KSynchronizationObject::Finalize();
}
@ -1011,7 +1005,7 @@ ResultCode KThread::Run() {
if (IsUserThread() && IsSuspended()) {
this->UpdateState();
}
owner->IncrementThreadCount();
owner->IncrementRunningThreadCount();
}
// Set our state and finish.
@ -1026,10 +1020,11 @@ ResultCode KThread::Run() {
void KThread::Exit() {
ASSERT(this == GetCurrentThreadPointer(kernel));
// Release the thread resource hint from parent.
// Release the thread resource hint, running thread count from parent.
if (parent != nullptr) {
parent->GetResourceLimit()->Release(Kernel::LimitableResource::Threads, 0, 1);
resource_limit_release_hint = true;
parent->DecrementRunningThreadCount();
}
// Perform termination.