From 7a1f813be15aca815893139b1de125f4e3f47d84 Mon Sep 17 00:00:00 2001 From: bunnei Date: Mon, 21 Jul 2014 18:50:49 -0400 Subject: Kernel: Updated Event and Mutex to specify handle that they are blocking for. --- src/core/hle/kernel/event.cpp | 2 +- src/core/hle/kernel/mutex.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'src/core/hle/kernel') diff --git a/src/core/hle/kernel/event.cpp b/src/core/hle/kernel/event.cpp index 127c0cfc6..1e417e09c 100644 --- a/src/core/hle/kernel/event.cpp +++ b/src/core/hle/kernel/event.cpp @@ -42,7 +42,7 @@ public: if (std::find(waiting_threads.begin(), waiting_threads.end(), thread) == waiting_threads.end()) { waiting_threads.push_back(thread); } - Kernel::WaitCurrentThread(WAITTYPE_EVENT); + Kernel::WaitCurrentThread(WAITTYPE_EVENT, GetHandle()); } if (reset_type != RESETTYPE_STICKY && !permanent_locked) { locked = true; diff --git a/src/core/hle/kernel/mutex.cpp b/src/core/hle/kernel/mutex.cpp index 1ccf1eb73..055f503f9 100644 --- a/src/core/hle/kernel/mutex.cpp +++ b/src/core/hle/kernel/mutex.cpp @@ -48,7 +48,7 @@ public: *wait = locked; if (locked) { - Kernel::WaitCurrentThread(WAITTYPE_MUTEX); + Kernel::WaitCurrentThread(WAITTYPE_MUTEX, GetHandle()); } return 0; -- cgit v1.2.3 From 60078baab1e0efd508e2574fcd7f2970dd9d5fa1 Mon Sep 17 00:00:00 2001 From: bunnei Date: Mon, 21 Jul 2014 21:31:21 -0400 Subject: AddressArbiter: Fixed bug with break statements missing from case statements. --- src/core/hle/kernel/address_arbiter.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/core/hle/kernel') diff --git a/src/core/hle/kernel/address_arbiter.cpp b/src/core/hle/kernel/address_arbiter.cpp index 61717bbe4..b5cb07f68 100644 --- a/src/core/hle/kernel/address_arbiter.cpp +++ b/src/core/hle/kernel/address_arbiter.cpp @@ -54,6 +54,7 @@ Result ArbitrateAddress(Handle handle, ArbitrationType type, u32 address, s32 va ArbitrateHighestPriorityThread(handle, address); } HLE::Reschedule(__func__); + break; // Wait current thread (acquire the arbiter)... case ArbitrationType::WaitIfLessThan: @@ -61,6 +62,7 @@ Result ArbitrateAddress(Handle handle, ArbitrationType type, u32 address, s32 va Kernel::WaitCurrentThread(WAITTYPE_ARB, handle); HLE::Reschedule(__func__); } + break; default: ERROR_LOG(KERNEL, "unknown type=%d", type); -- cgit v1.2.3 From 2542350b85d1a43d714528ba7ea87a6405ae30d4 Mon Sep 17 00:00:00 2001 From: bunnei Date: Mon, 21 Jul 2014 21:33:38 -0400 Subject: AddressArbiter: Removed unnecessary HLE::Reschedule. --- src/core/hle/kernel/address_arbiter.cpp | 1 - 1 file changed, 1 deletion(-) (limited to 'src/core/hle/kernel') diff --git a/src/core/hle/kernel/address_arbiter.cpp b/src/core/hle/kernel/address_arbiter.cpp index b5cb07f68..bdf76e0c2 100644 --- a/src/core/hle/kernel/address_arbiter.cpp +++ b/src/core/hle/kernel/address_arbiter.cpp @@ -53,7 +53,6 @@ Result ArbitrateAddress(Handle handle, ArbitrationType type, u32 address, s32 va for(int i = 0; i < value; i++) ArbitrateHighestPriorityThread(handle, address); } - HLE::Reschedule(__func__); break; // Wait current thread (acquire the arbiter)... -- cgit v1.2.3 From d4bd2f2e5d38c865777800271a1bbb836034d41b Mon Sep 17 00:00:00 2001 From: bunnei Date: Tue, 5 Aug 2014 22:32:13 -0400 Subject: Thread: Added more descriptive comment to WaitCurrentThread. --- src/core/hle/kernel/thread.cpp | 6 +++++- src/core/hle/kernel/thread.h | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) (limited to 'src/core/hle/kernel') diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp index 86bbf29d0..1d7ded6f6 100644 --- a/src/core/hle/kernel/thread.cpp +++ b/src/core/hle/kernel/thread.cpp @@ -274,7 +274,11 @@ Thread* NextThread() { return Kernel::g_object_pool.GetFast(next); } -/// Puts the current thread in the wait state for the given type +/** + * Puts the current thread in the wait state for the given type + * @param wait_type Type of wait + * @param wait_handle Handle of Kernel object that we are waiting on, defaults to current thread + */ void WaitCurrentThread(WaitType wait_type, Handle wait_handle) { Thread* thread = GetCurrentThread(); thread->wait_type = wait_type; diff --git a/src/core/hle/kernel/thread.h b/src/core/hle/kernel/thread.h index f2bfdfa1a..39fa38b75 100644 --- a/src/core/hle/kernel/thread.h +++ b/src/core/hle/kernel/thread.h @@ -69,7 +69,11 @@ void ArbitrateAllThreads(u32 arbiter, u32 address); /// Gets the current thread handle Handle GetCurrentThreadHandle(); -/// Puts the current thread in the wait state for the given type +/** + * Puts the current thread in the wait state for the given type + * @param wait_type Type of wait + * @param wait_handle Handle of Kernel object that we are waiting on, defaults to current thread + */ void WaitCurrentThread(WaitType wait_type, Handle wait_handle=GetCurrentThreadHandle()); /// Put current thread in a wait state - on WaitSynchronization -- cgit v1.2.3