From 920fd4cf0dcb69d1075154572953e780725d1908 Mon Sep 17 00:00:00 2001 From: wheremyfoodat Date: Thu, 20 Apr 2023 02:48:57 +0300 Subject: [PATCH] [Kernel::WaitSync1] Instant timeout if ns == 0 --- include/kernel/kernel_types.hpp | 3 +++ src/core/kernel/events.cpp | 6 ++++++ 2 files changed, 9 insertions(+) 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];