This is a nightly release of Vibepollo and contains several bug fixes and may contain new features. Check the commit log for more information.
Windows installer · Linux (Arch x86_64)
Nightly Windows installers are unsigned and include self-signed gamepad components. They may cause false-positive antivirus alerts.
Source: b739553a9653
Since the preceding successfully published nightly Commit log
2.0.2-nightly.d20261030.r.1.45109fb4fb38: compare exact sources.
fix(playnite): back off and rate-limit pipe reconnects (#689)
* fix(playnite): back off and rate-limit pipe reconnects
When the pre-0.5 script connector (SunshinePlaynite.psm1) is still
installed next to Playnite.DesktopApp.exe, Playnite loads it alongside the
compiled plugin. Both serve the single-instance pipe
Sunshine.PlayniteExtension, so the one that does not own the name gets
ERROR_PIPE_BUSY from NamedPipeServerStream immediately. The accept loop
retried with no delay and logged a WARN every ~1 ms to extensions.log and
sunshine_playnite-*.log, growing them by gigabytes and keeping Defender's
real-time scanner busy.
Plugin:
- Back off after a failed accept attempt: 250 ms doubling to 10 s with
jitter, reset on a successful accept; the wait ends on Stop().
- Log the first failure of a run, then at most one summary per 60 s, and
note recovery once a client is accepted.
- Explain ERROR_PIPE_BUSY: another process owns the pipe, usually a second
copy of the connector.
- At startup, warn about any SunshinePlaynite.psm1 in Playnite's
Extensions folders.
Sunshine (IpcClient, also used by playnite-launcher):
- Replace the fixed 500/300 ms reconnect sleeps with the same backoff; it
resets only after a connection stays up for 5 s, so a connect-and-drop
loop cannot spin either. Sleeps return promptly on stop().
- Rate-limit connect-failure logging the same way, with the Win32 error.
- Add NamedPipeFactory::set_quiet_connect_failures() so per-attempt
"pipe not found/busy" logs drop to debug for callers that report
failures themselves, and last_connect_error() so the real error is
reported instead of a GetLastError() clobbered by logging.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* test(playnite): update pipe fixtures for the reconnect backoff
The identification and virtual-display transport fixtures extract code from
pipes.cpp and playnite_ipc.cpp, so they broke on the new connect_to_plugin
signature and the factory's quiet-failure state. Carry that state into both
fixtures and assert the connect error is reported on failure.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>