Repository navigation
feat(libSceAmpr): implement _Cnd_signal and _Cnd_init_with_name - #3499
Conversation
Deathloop (PPSA01670), Minecraft Legends (PPSA05510) and GTA III Definitive Edition import both from libSceAmpr. They take a pointer to the handle slot and act on the conditions created by the libc _Cnd_init: _Cnd_signal wakes one waiter through a libc helper, _Cnd_init_with_name is _Cnd_init with the name ignored. _Thrd_id still throws. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
Highlighting what merging this unblocks, for whoever triages the queue: The change itself: the last two missing Dinkumware condition-variable exports of libSceAmpr — Verification state: dual-platform — the author's Windows run in #3342, and an independent Linux full-suite pass (829/829, including every Vulkan test on real RDNA4/RADV, plus The compounding part: this is currently my only open PR under the intake limit (no merged PRs yet). If it merges, the 20-slot allowance opens — and I maintain 30 dual-platform-verified fix branches from intake-gated authors that are carry-ready against current If |
|
Thanks for flagging the overlap. I carried David's #3499 implementation onto current I think my #3657 branch is the better review target for the test coverage: it retains David's two-waiter The collaborator closed #3657 as a duplicate before I pushed this consolidation. GitHub now rejects reopening it because its branch was force-pushed after closure. I have not opened another live PR while yours remains open, to avoid leaving two PRs for the same functions. Would you be willing to close #3499 so I can open a replacement from the consolidated branch? If you prefer to keep #3499 as the review target, the test-timeout follow-up is at |
|
Other open pull requests touch the same code. Merging one will break the other, or both implement the same thing. If this one builds on them, list them in Depends on.
|
|
Checked on Linux (GCC, merged onto current main): |
What
Carries @screamm's fix from #3342 (the author is under the open-PR limit). The commit is theirs, unchanged (
dce174749), rebased onto currentmain.Deathloop (PPSA01670), Minecraft Legends and GTA III Definitive Edition import these exports; both were
NotImplemented_nid_no_patchstubs after #3079 gave libc the Dinkumware_Cnd_*family:_Cnd_signal(pthread_cond**)uses the pointer-to-slot ABI the feat(libc): implement Dinkumware mutex and condition exports #3079 review established and a new libc helperSignalCondition_nid_no_patch(inThreads.cpp) that wakes one waiter of the condition objects libc's_Cnd_initcreates and returns_Thrd_success, like the merged_Cnd_broadcast; bad handles throw the sameinvalid_argumentas libc._Cnd_init_with_name(pthread_cond**, const char*)calls libc's_Cnd_initand ignores the name, following fpPS4's reverse-engineered PS4_Mtx_init_with_namewhere the name only names the pthread object._Thrd_idkeeps throwing: no public source settles the PS5 return form. All recorded in TechnicalDebt.Tested
guest_ampr_threadsandguest_libc_threadspass, full suite 507/507, withmain'sExport.cppthe extended Ampr test fails.BUILD_TESTING=ON—guest_ampr_threadsandguest_libc_threadspass (including the 50 ms "wakes exactly one" window); full suite 829/829 including the Vulkan tests on AMD RX 9070 XT (RADV GFX1201);tools/check_conventions.py --base origin/mainandgit diff --checkpass.Checklist
main; no other open PR implements the same functionsNotImplemented_nid_no_patch); silent stubs are listed in TechnicalDebt.mdfiles or images added to the repository