aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar bunnei <bunneidev@gmail.com>2014-11-30 08:41:49 -0500
committerGravatar bunnei <bunneidev@gmail.com>2014-11-30 08:41:49 -0500
commita5afad09378dab8978e8e4149337aebf70891668 (patch)
tree8affb19959e7b78fdb0b1aea80569b2ba30b1863 /src
parent2ad9ad9297d2f83b13667d885084c1a3e6daab3a (diff)
parentde851ba1a18ce2439a0b8ad46081990df377347c (diff)
Merge pull request #226 from bunnei/svc-and-thread-fixes
Svc and thread fixes
Diffstat (limited to 'src')
-rw-r--r--src/core/hle/kernel/thread.cpp2
-rw-r--r--src/core/hle/svc.cpp5
2 files changed, 6 insertions, 1 deletions
diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp
index f3f54a4e..f5979590 100644
--- a/src/core/hle/kernel/thread.cpp
+++ b/src/core/hle/kernel/thread.cpp
@@ -143,7 +143,7 @@ void ChangeReadyState(Thread* t, bool ready) {
/// Verify that a thread has not been released from waiting
inline bool VerifyWait(const Thread* thread, WaitType type, Handle wait_handle) {
_dbg_assert_(KERNEL, thread != nullptr);
- return type == thread->wait_type && wait_handle == thread->wait_handle;
+ return (type == thread->wait_type) && (wait_handle == thread->wait_handle) && (thread->IsWaiting());
}
/// Stops the current thread
diff --git a/src/core/hle/svc.cpp b/src/core/hle/svc.cpp
index 87d76885..43a3cbe0 100644
--- a/src/core/hle/svc.cpp
+++ b/src/core/hle/svc.cpp
@@ -189,6 +189,8 @@ static Result CreateAddressArbiter(u32* arbiter) {
/// Arbitrate address
static Result ArbitrateAddress(Handle arbiter, u32 address, u32 type, u32 value, s64 nanoseconds) {
+ DEBUG_LOG(SVC, "called handle=0x%08X, address=0x%08X, type=0x%08X, value=0x%08X", arbiter,
+ address, type, value);
return Kernel::ArbitrateAddress(arbiter, static_cast<Kernel::ArbitrationType>(type),
address, value).raw;
}
@@ -331,6 +333,9 @@ static Result ClearEvent(Handle evt) {
/// Sleep the current thread
static void SleepThread(s64 nanoseconds) {
DEBUG_LOG(SVC, "called nanoseconds=%lld", nanoseconds);
+
+ // Check for next thread to schedule
+ HLE::Reschedule(__func__);
}
/// This returns the total CPU ticks elapsed since the CPU was powered-on