fix(launcher): recover a stale client tree without restarting Darling

Darlingserver normally stays alive after the Riot Client or game is closed.
If the client window disappears but Riot/League/CEF processes remain,
restarting via run.sh reuses a half-dead runtime and can fail to open a
window.

Add an opt-in RCLOL_RECOVER_STALE_CLIENT=1 preflight. When a darlingserver is
alive, no game is running, no managed client window is visible and stale
client processes belong to this prefix, stop only that client/CEF tree.
Preserve darlingserver, launchd/mldr, sockets and .init.pid, then continue
with the normal product launch.

The helper fails closed when X11 is unavailable, never touches a running game
or a visible client window, and does not patch client binaries, CEF or assets.
It saves the Darling bootstrap, but not Riot Client/CEF startup; a full runtime
restart remains the fallback if no window appears.
This commit is contained in:
3AvisD committed 2026-10-22 15:27:33 -06:00
1 parent a4da79011f
commit c8dd3886fc
7 files changed
+354

No files matched your search

+9
View File
@@ -149,6 +149,15 @@ ownership or window information cannot be read. A hidden background client or
download is restarted when recovery is enabled. Other desktop environments are
not supported by this helper; recovery is off by default.
For a live Darling runtime with no visible client window but stale Riot/League/
CEF processes, `RCLOL_RECOVER_STALE_CLIENT=1` performs a partial recovery before
the next launch. It keeps `darlingserver`, launchd/mldr, sockets and `.init.pid`,
stops only the stale client process tree, and then lets the normal launcher start
the product again. It does nothing while a game process is running or when a
managed client window is visible. With X11/Xwayland unavailable it fails closed.
This saves the Darling bootstrap but not the Riot Client/CEF startup itself. If
no window appears afterward, use a full runtime shutdown/restart.
### Client window stays black after a match
The League client keeps its Chromium/CEF UI (`LeagueClientUx` and its helpers)