A dispatch-cache data hit copies the variant's words into a local
liveWords, patches the data words and builds its captured regions as
spans over that buffer.
When the dispatch is resolved ahead (every compute queue by default),
the parked entry copied both captured and liveWords: the copied regions
still pointed into the local buffer, which was freed on return. The
adopting dispatch then built its snapshots from those regions, and an
address-based program compared the freed words in AddSnapshot (an ASan
heap-use-after-free; the plain build reports "guest snapshot differs
from registered memory"). Moving both into the parked entry keeps the
buffer the regions point into.
The pipelined dispatch item had the same shape: its snapshots span the
local liveWords but the closure did not keep it. Capturing it by move
keeps the item self-contained.
DispatchDataHitWords submits an address-based dispatch whose constant
changes every round on a compute queue, so each data hit is resolved
ahead and adopted.
The cancelled replay's bound was taken from the totals before the torn-tail replay, which already
adds one present pipeline; when a worker reached the graphics recipe before the cancel, the test
failed (13 of 600 runs with 24 in parallel).
Co-Authored-By: Claude <[email protected]>
A condition variable that winpthreads initializes statically is set up on its first wait, under one global spinlock for all such variables. The async log's worker made that first wait itself, right after the driver started it, so a process that exited soon after starting the driver, such as guest_shader_link, could end with ExitProcess killing the worker inside that setup. The spinlock then stayed held, and the next destructor of a never-used condition variable, in ~Driver, spun forever. The log's constructor now waits on each of its condition variables once with no timeout before it starts the worker, so the worker's waits never take that spinlock. A new shutdown test mode exits right after the driver starts.
Prepared captures pass their source handle to the plan reload. When the handle
matches the request, its artifact serves the draw, so the rebuilt resource
program is not kept even if the push layout differs from the artifact's.
A handle that does not match the source is rejected before the entry changes.
Same change as f1b42dae4 on top of c00b0dfb9.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
A prepared artifact also serves draws whose push constants start at another
offset. When such a capture reloads a released plan that is missing from the
disk cache, the rebuilt resource program must not stay on the source entry.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
A PS5 (firmware 13.60) reports the front left speaker of its speaker info at +30 degrees and the front right one at -30, and -360 for the azimuth and elevation of every empty slot, in every HDMI device type and channel setting it offered. sceAudioOut2GetSpeakerInfo reported the front pair the other way round and empty slots as 0, the front centre direction. The type stays 0: the console's type followed the HDMI device type, and it reported 0 with the device set to TV.
wild 0.10.0 gives no canonical PLT entry to a DSO function whose address a
non-PIE executable takes (wild-linker/wild#2469, fixed after the release by
#2480), so the absolute personality pointer in .eh_frame names a local stub
and every exception reaching main is unhandled.
Co-Authored-By: Claude <[email protected]>
The driver's static is destroyed from its DLL's atexit table at process exit, after ExitProcess has ended the async log's worker. Its stop() then flushed the log through Flush(), which takes the log's lock and waits for every queued line, so it never returned when the worker died holding that lock or with lines queued. #6800's bounded flush runs after it, because the log registers it while the driver is being constructed. stop() now uses that bounded flush, which reads the counters without the lock and gives up after EndFlushLimit, marking the log abandoned. A new shutdown test mode holds the log's lock from another thread and checks that the driver's shutdown still returns.
The runner cannot create directories under /var/cache/anyps5 (mkdir: Permission denied), so the install step failed
and the linux job built nothing.
Co-Authored-By: Claude <[email protected]>
The first-use check needs the main-queue copies of an import to be still in flight when the import returns to the write watch. On a fast device they can finish first, and the test then failed although the driver did nothing wrong. Retry with 4 and 16 times as many copies, and report the case as not tested when the copies finish first every time.
FreeBSD rejects an access mode of 3 in kern_openat and the combination of O_CREAT, O_EXCL and O_DIRECTORY in vn_open_cred before it looks the path up. sceKernelOpen, open and openat threw std::invalid_argument for access mode 3 and, on Windows, created the file for the second combination.
(cherry picked from commit 038a07098ef38e95fade52154847b579dcb0f9d0)
_Unwind_Backtrace and _Unwind_ForcedUnwind call the trace and stop
functions a title passes them, and _Unwind_DeleteException calls the
exception_cleanup of the exception it deletes. Their types in
UnwindAbi.hpp had no APS5_VABI, so on Windows these guest functions were
called with the Microsoft x64 convention: the context and the argument
went to rcx and rdx while the guest reads rdi and rsi. vkQuake
(PPSA99010) imports _Unwind_Backtrace and reads each frame in its
callback (db3ec02c5).
The three types are now APS5_VABI, like the callbacks of __cxa_vec_ctor
and the other libc exports, and so is Cleanup, the exception_cleanup of
the exceptions libc throws. An exception thrown by libstdc++ on Windows
(class GNUCC++) has a host cleanup, so _Unwind_DeleteException passes it
to libgcc's _Unwind_DeleteException, which calls that cleanup as before.
Linux and macOS are unchanged.
PipeReadiness and PipeReadState both opened the pipe handle and asked
NtQueryInformationFile for its access mask and local information. Both
now go through QueryPipe, which keeps each caller's error prefix.
Brings #5884's request field (output primitive size, read from serialization version 31). This branch's sample order stays at version 32, read after it, so a version-31 request reads as before.
Each client thread handshakes, writes, reads the reply and the end of
the stream, so session setup and record allocations from several
threads contend for the same context pool. The pool memory must return
to its loaded size afterwards.
Initialize the pool's mutex explicitly, which -Wextra asks for.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01RoU3ZF76A6uR8sCA7NMLch