ApolloVibe 2026.6.1-ms3
Fixes a hang that made ApolloVibe unusable on every AMD GPU.
The bug
On AMD hardware ApolloVibe wedged during encoder probing, at startup, before any
client connected. One CPU core pinned at 100% and the process never recovered.
NVIDIA systems were unaffected, which is why this went unreported for so long.
Found and confirmed by @treghart in
#2. He reported it, ran
build after build on his own hardware across five failed hypotheses, uninstalled his
working setup to test a stock Sunshine control, and finally ran an instrumented build
whose log located the defect in a single run. Every one of my own theories before that
was wrong. This fix is his as much as anyone's.
The cause
Upstream Sunshine commit 02036920, "build(deps): Update to FFmpeg 8.0 branch
(#4143)", changed two things at once: it added a drain to the encode session
destructor, and it bumped third-party/build-deps to the FFmpeg 8.0 the drain was
written for.
Apollo took both halves correctly and carried them for seven weeks. Then merge
10fd290b (2025-09-27) resolved third-party/build-deps back to a9a7f863, a pin
from 2025-07-12 that neither parent of that merge points at. So every Apollo-derived
build since then has run a drain written for FFmpeg 8.0 against a pre-8.0 FFmpeg. On
AMF, avcodec_send_frame(ctx, nullptr) never returns. On NVENC it returns
immediately.
This release removes the drain. That costs nothing: it received packets into a local
that was discarded on the next line, so it moved no data — its only effect was letting
the encoder drain before a teardown that destroys everything anyway.
This is an upstream bug
It is inherited from Apollo, not introduced here. Filed upstream as
ClassicOldSong/Apollo#1588,
where the correct fix is restoring the submodule pin rather than deleting the drain.
Testing
- AMD / AMF — confirmed by @treghart on a Vega iGPU: encoder probe completes and
Apollo reachesRegistered Apollo mDNS servicewith the CPU idle. - NVIDIA / NVENC — regression-checked here on an RTX 3080. Six encode sessions
created and destroyed during probe, including one deliberately failing session, with
no hang. Full seat provision/serve/teardown passed 24 of 24 checks. - Not tested: teardown of a live client stream on this build. Both test hosts
verified the probe path, which is where the fault was.
Install
apollovibe-windows-x64.zip is the complete portable build — sunshine.exe,
assets/ and tools/. MultiSeat's installer pulls it from
releases/latest/download/ and needs no change.
SHA-256 of sunshine.exe:
75467310FCABB262E47D707DF79C105415D3A5EBCD7CE3F5225180CA14BC9056