summaryrefslogtreecommitdiffstats
path: root/src/core/hle/kernel/thread.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/hle/kernel/thread.cpp')
-rw-r--r--src/core/hle/kernel/thread.cpp35
1 files changed, 17 insertions, 18 deletions
diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp
index a645ee3a2..16babe71a 100644
--- a/src/core/hle/kernel/thread.cpp
+++ b/src/core/hle/kernel/thread.cpp
@@ -47,19 +47,21 @@ Thread::Thread(KernelCore& kernel) : SynchronizationObject{kernel} {}
Thread::~Thread() = default;
void Thread::Stop() {
- SchedulerLock lock(kernel);
- // Cancel any outstanding wakeup events for this thread
- Signal();
- Core::System::GetInstance().CoreTiming().UnscheduleEvent(kernel.ThreadWakeupCallbackEventType(),
- global_handle);
- kernel.GlobalHandleTable().Close(global_handle);
- global_handle = 0;
- SetStatus(ThreadStatus::Dead);
+ {
+ SchedulerLock lock(kernel);
+ // Cancel any outstanding wakeup events for this thread
+ Signal();
+ Core::System::GetInstance().CoreTiming().UnscheduleEvent(
+ kernel.ThreadWakeupCallbackEventType(), global_handle);
+ kernel.GlobalHandleTable().Close(global_handle);
+ SetStatus(ThreadStatus::Dead);
- owner_process->UnregisterThread(this);
+ owner_process->UnregisterThread(this);
- // Mark the TLS slot in the thread's page as free.
- owner_process->FreeTLSRegion(tls_address);
+ // Mark the TLS slot in the thread's page as free.
+ owner_process->FreeTLSRegion(tls_address);
+ }
+ global_handle = 0;
}
void Thread::WakeAfterDelay(s64 nanoseconds) {
@@ -112,8 +114,6 @@ void Thread::ResumeFromWait() {
return;
}
- hle_callback = nullptr;
-
if (activity == ThreadActivity::Paused) {
SetStatus(ThreadStatus::Paused);
return;
@@ -398,14 +398,13 @@ bool Thread::AllSynchronizationObjectsReady() const {
bool Thread::InvokeWakeupCallback(ThreadWakeupReason reason, std::shared_ptr<Thread> thread,
std::shared_ptr<SynchronizationObject> object,
std::size_t index) {
- ASSERT(hle_callback);
- return hle_callback(reason, std::move(thread), std::move(object), index);
+ ASSERT(wakeup_callback);
+ return wakeup_callback(reason, std::move(thread), std::move(object), index);
}
-bool Thread::InvokeHLECallback(ThreadWakeupReason reason, std::shared_ptr<Thread> thread,
- std::shared_ptr<SynchronizationObject> object, std::size_t index) {
+bool Thread::InvokeHLECallback(std::shared_ptr<Thread> thread) {
ASSERT(hle_callback);
- return hle_callback(reason, std::move(thread), std::move(object), index);
+ return hle_callback(std::move(thread));
}
void Thread::SetActivity(ThreadActivity value) {