AnyPS5/core/libs/prx/libkernel
David 774f21845d feat(libkernel): implement pthread_cond_reltimedwait_np
Add pthread_cond_reltimedwait_np (K953PF5u6Pc; computed with
tools/nid_names.py and matching aerolib.csv) as scePthreadCondTimedwait
with POSIX error numbers: ETIMEDOUT when the relative timeout expires,
EPERM when the caller does not hold the mutex, and the mutex held again on
return in every waiting case.

Titles: Porpoise PPSA99764 and RetroArch PPSA99169 import it.
Predicted from relink registry order, not observed: Porpoise stops with
"FAIL: unresolved ELF import K953PF5u6Pc from libkernel.prx" (registry
index 384; RetroArch index 490). No call site is resolved in the registry.

The third argument is a relative timeout in microseconds, not a
struct timespec. FreeBSD 11.4 libthr (8c639945a44588f6cfdddfb057bb5aad88735da0)
has no such function. shadPS4 (3a9f57265d28975658f1ca941daa5c879c7a74bd,
src/core/libraries/kernel/threads/condvar.cpp:229-234, 445, 467-468)
registers posix_pthread_cond_reltimedwait_np(cond, mutex, u64 usec) for this
NID and the same function for scePthreadCondTimedwait (BmMjYxmew1w), whose
microsecond argument this repository already implements. The width follows
the SCE twin's 32-bit SceKernelUseconds, as sem_reltimedwait_np does, not
shadPS4's u64. There is no timespec to validate, so no EINVAL case.
Recorded in TechnicalDebt.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit c86ec8417d12f5b12136b0f06eae06493b0e7a62)
2026-10-11 23:53:37 +02:00
..
Aio/src fix(libkernel): preserve EINVAL in AIO completions 2026-10-10 08:42:19 +02:00
AppMetadata fix(kernel): skip the download0 mount when param.json cannot be read 2026-10-08 16:07:18 +02:00
Apr Merge pull request #3588 from tv7/fix/apr-async-queue 2026-10-11 23:51:13 +02:00
DirectMemory fix(libkernel): keep stack protection inside the stack and never throw while restoring it 2026-10-11 02:28:03 -05:00
Equeue fix(libkernel): report a level-triggered equeue event once per wait 2026-10-11 11:28:34 +00:00
EventFlag/src feat(runtime): timed waits, sync primitive fixes, heap and RTC fixes, unattended-run switches 2026-09-26 19:00:39 -07:00
File Merge pull request #3681 from zmeizy/claude/kernel-file-errno-translation 2026-10-11 23:51:05 +02:00
Module perf(libkernel): read a loaded image's unwind tables once in sceKernelGetModuleInfoFromAddr 2026-10-11 19:07:37 +02:00
Pthread feat(libkernel): implement pthread_cond_reltimedwait_np 2026-10-11 23:53:37 +02:00
Semaphore fix(libkernel): accept a zero count in sceKernelSignalSema 2026-10-10 16:12:43 +00:00
Socket Merge pull request #3568 from DariusHQ/feat/libkernel-sendfile 2026-10-11 23:43:14 +02:00
SyncOnAddress/src fix(libkernel): throw on a size-0 _umtx_op timeout that is not a valid timespec 2026-10-11 11:13:33 +02:00
System Merge pull request #3493 from AchrafReyani/feat/libkernel-ioctl 2026-10-11 23:35:53 +02:00
Time fix(libkernel): honor null clock_getres output 2026-10-11 15:51:43 +02:00
CMakeLists.txt feat(libkernel): implement the pthread spinlock calls 2026-10-11 23:53:36 +02:00
KernelErrors.hpp refactor(kernel): share SCE kernel error codes through KernelErrors.hpp 2026-09-27 13:32:28 +07:00
Unimplemented.cpp feat(libkernel): implement thread cancellation 2026-10-10 11:32:09 +02:00