diff --git a/core/libs/prx/libkernel/System/src/Signals.cpp b/core/libs/prx/libkernel/System/src/Signals.cpp index 35bfc4e4b..0ce268890 100644 --- a/core/libs/prx/libkernel/System/src/Signals.cpp +++ b/core/libs/prx/libkernel/System/src/Signals.cpp @@ -1,5 +1,6 @@ #include "SceTypes.hpp" #include "prx/libc/include/General.hpp" +#include "prx/libkernel/Pthread/Posix/Common.hpp" #include "prx/libc/include/general/VabiMacros.hpp" #include #include @@ -203,8 +204,8 @@ int APS5_VABI kill_nid_postfix(int pid, int guest) { return guest == 0 ? 0 : raise_nid_postfix(guest); } int APS5_VABI pthread_kill_nid_postfix(Pthread thread, int guest) { - if (guest < 0 || guest > MaxSignal) return 22; - if (thread == nullptr) return 3; + if (guest < 0 || guest > MaxSignal) return PosixThread::GUEST_EINVAL; + if (thread == nullptr) return PosixThread::GUEST_ESRCH; if (guest == 0) return 0; if (thread != scePthreadSelf()) NotImplemented_nid_no_patch(("pthread_kill signal " + std::to_string(guest) + " to another thread").c_str()); return raise_nid_postfix(guest) == 0 ? 0 : *__error_nid_postfix(); diff --git a/core/libs/tests/GuestSignals.cpp b/core/libs/tests/GuestSignals.cpp index 187e6ae36..0f048e414 100644 --- a/core/libs/tests/GuestSignals.cpp +++ b/core/libs/tests/GuestSignals.cpp @@ -58,6 +58,8 @@ int main() { Require(pthread_kill_nid_postfix(scePthreadSelf(), 200) == 22); Require(pthread_kill_nid_postfix(scePthreadSelf(), -1) == 22); Require(pthread_kill_nid_postfix(nullptr, 15) == 3); + Require(pthread_kill_nid_postfix(nullptr, 128) == 3); + Require(pthread_kill_nid_postfix(nullptr, 129) == 22); bool threw = false; try { pthread_kill_nid_postfix(reinterpret_cast(std::uintptr_t{0x10}), 15); } catch (const std::runtime_error&) { threw = true; }