diff --git a/include/kernel/kernel_types.hpp b/include/kernel/kernel_types.hpp index 27893922..8db4903a 100644 --- a/include/kernel/kernel_types.hpp +++ b/include/kernel/kernel_types.hpp @@ -23,6 +23,9 @@ namespace SVCResult { BadThreadPriority = 0xE0E01BFD, PortNameTooLong = 0xE0E0181E, + + // Returned when a thread stops waiting due to timing out + Timeout = 0x9401BFE, }; } diff --git a/src/core/kernel/events.cpp b/src/core/kernel/events.cpp index cab777f7..dad80a47 100644 --- a/src/core/kernel/events.cpp +++ b/src/core/kernel/events.cpp @@ -103,6 +103,12 @@ void Kernel::waitSynchronization1() { if (!shouldWaitOnObject(object)) { regs[0] = SVCResult::Success; } else { + // Timeout is 0, don't bother waiting, instantly timeout + if (ns == 0) { + regs[0] = SVCResult::Timeout; + return; + } + regs[0] = SVCResult::Success; auto& t = threads[currentThreadIndex];