The new lock was passed in a plain pointer ordered only by std::atomic::wait. GCC 16's libstdc++ returns from the wait with a value loaded inside the uninstrumented library, so ThreadSanitizer builds report a data race on every run. Store the handle with release and load it with acquire.
waitMemory skipped the collect epoch bump for a WAIT_REG_MEM satisfied by a
label its own queue stored after the wait was received only while that label
was still pending. When the label had already reached memory, the at-entry
return and the poll loop exit bumped anyway, so whether the wait was an
ordering point depended on whether the GPU finished before the queue worker
reached the wait. On the Linux CI runner (llvmpipe) the spin dispatch of
agc_driver_same_queue_label_wait sometimes finished first and the test failed
with 8 to 12 extra bumps for 16 waits.
Both memory-satisfied returns now consult the label-store history the same
way. The test gains a gated submission in which every label is in memory
before its wait.
Include File.hpp for sceKernelOpen, sceKernelRead and sceKernelClose and
Api.hpp for sceKernelGetFsSandboxRandomWord instead of redeclaring them
in a local extern "C" block, so each export keeps one declaration.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Each test serves its own CA_LIST.cer through the working-directory
override of the sandbox path. guest_ssl_system_roots checks that a
handshake to the fixture server fails without the helper and passes
with it, that a context authority still works alongside the list, and
that an empty or certificate-free list throws with its path.
guest_http2_system_roots sends a request from a context with no loaded
certificate, which passes only through the transport's helper call.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
An empty list, or one with no certificate, made SystemRoots() return a
null chain, so the connection trusted nothing. Throw and name the path,
as the missing-file case does; nothing is cached, so a later call
reads the list again.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Every libSceSsl context started without trust anchors, so a libSceHttp2
request without a verify callback failed the known-CA check. RetroArch's
updater, PS5LM and Porpoise all use version-3 templates over https://
without one. libSceSsl now parses /<sandbox word>/common/cert/CA_LIST.cer,
served by libkernel from the host trust store, once per process into its
own pool, and SslTrustSystemRoots_nid_no_patch links those roots after
the context's own authorities for one connection. The HTTP/2 transport
calls it after creating each connection.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Run 40579197008 (main 771d8b5bf7) failed guest_posix_spawn. Under load the child
of CheckStoppedChild exits right after SIGCONT, so waitpid(WCONTINUED) reports the
exit instead of 0x13 (reproduced with 24 CPU spinners via ctest --repeat). The
child now sleeps 2 s after the stop.
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Both capture files were named with an unseeded std::rand(), which returns the same value in every process, so two concurrent runs sharing a temporary directory truncated and removed each other's stderr and stdout captures.
agc_driver_pipelined_metadata_pass went straight to the driver, so a
missing Vulkan driver failed it with vkCreateInstance result -9 instead
of returning 77. It now probes the device with OpenVulkanTestDevice()
first, as the other pipelined tests do.
agc_submit_progress and agc_submit_progress_no_timeline set
ANYPS5_REQUIRE_VULKAN=1 in their own ctest environment, which turned
the test's own skip into a failure on every host. CI sets the variable
for the whole Linux job, so a missing device still fails there.
OpenVulkanTestDevice() skipped on any exception from the VulkanDevice
constructor, so a construction failure on a host that has a device was
reported as a skip. The constructor now throws VulkanUnavailable when
the loader cannot be loaded, vkCreateInstance returns
VK_ERROR_INCOMPATIBLE_DRIVER, or no Vulkan 1.1 graphics and compute
device exists, and the helper skips only on that. Any other failure,
including ANYPS5_GPU naming no device, fails the test.
agc_driver_vulkan_test_device covers the healthy device, the required
device and a construction failure with a device present;
agc_driver_vulkan_test_device_no_driver hides the ICD and covers the
skip and the ANYPS5_REQUIRE_VULKAN=1 failure.