Commit dfbb2c7
fix: address sixth round of PR review findings
VcRedistStep: per-year markers now also encode architecture (`$year-x86` /
`$year-x64`, plus `legacy-x86` / `legacy-x64` for yearless paths). Without
this, an x86-only install (e.g. vc_redist.x86.exe for 2015) wrote a year-only
marker that incorrectly suppressed the matching x64 install on a later game.
Yearless redists (A:\redist\vcredist_*, A:\_CommonRedist\VC_redist.*) are
similarly distinguished. archKey() inspects the win path for x64/amd64/wow64/
x86_64 hints (and explicit .x64./.x86. filenames) and defaults to x86 for
ambiguous paths. Round-5 archless markers are migrated as `_$year-x86` only —
conservative: any actual x64 install will re-run once. appliesTo no longer
short-circuits on the coarse game-dir VCREDIST_INSTALLED marker when per-year/
arch markers indicate a missing (year, arch) pair; the game-dir marker is now
only a fallback when no per-year markers exist or containerRoot is null.
WinHandler.GET_PROCESS dispatch: each listener invocation (slot listener and
each multi-listener entry) is now wrapped in try/catch so one bad listener
can't kill the worker thread. Same fix applied to the listProcesses() send-
failure broadcast.
WinHandler.exec(String): handle quoted paths. A leading `"` triggers quoted-
path parsing (filename = quoted substring; parameters = trimmed remainder);
unquoted commands still split on the first whitespace. Without this,
"C:\Program Files (x86)\Steam\steam.exe" -shutdown shredded into a bogus
filename of "C:\Program".
XServerScreen.requestWineProcessSnapshot: distinguish request/send failure
from a legitimate empty process list. WinHandler.listProcesses() emits
(0, 0, null) only when sendPacket() fails — Wine itself never broadcasts
empty. Added ProcessSnapshotException, listener completes deferred
exceptionally on (count==0 && info==null), await maps it to null so
isSteamExeAlive(null) == true keeps the polling loop alive instead of
falsely concluding Steam exited.
WinHandler + XServerScreen: add a snapshot-collection mutex
(processSnapshotMutex). Both Kotlin pollers (requestWineProcessSnapshot and
startExitWatchForUnmappedGameWindow) now serialize their add-listener →
listProcesses → await → remove-listener sequence so concurrent listProcesses
calls don't cross-pollute each other's deferreds. Multi-listener support is
preserved for long-running watchers; only the per-iteration snapshot is
serialized.
LudusaviRegistry.ensureLoaded: extend the empty-set guard to the disk-cache
fallback. A poisoned `{}` cache file (e.g., one written before the round-5
empty-fetch guard shipped) used to populate memoryCache with emptyMap(),
after which the fast path short-circuited forever. Now: if the parsed disk
cache is empty, log and delete the poisoned file (best-effort), fall through
to null so the next ensureLoaded retries the fetch. Parser exceptions still
leave the file alone.
WindowManager.reapLeakedClientWindows: add the 1x1 parent-size predicate to
match the compositor's full orphan-chain marker (dd3987b). Without it, a
legitimate window whose parent happens to be blank-class+pid==0 but is NOT
a 1x1 orphanage stub could still be reaped.
PluviaMain SDK bridge prompt: drop the dead `persisted` boolean computed in
onConfirmClick / onActionClick (round-5 changed every relaunch(...) to
relaunch(true), so the Boolean is no longer read). Side effects and the
existing onFailure Timber.w log are preserved.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>1 parent ffba233 commit dfbb2c7
7 files changed
Lines changed: 262 additions & 66 deletions
File tree
- app/src
- main/java
- app/gamenative
- ui
- screen/xserver
- utils
- preInstallSteps
- com/winlator
- winhandler
- xserver
- test/java/app/gamenative/utils/preInstallSteps
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
821 | 821 | | |
822 | 822 | | |
823 | 823 | | |
824 | | - | |
825 | | - | |
826 | | - | |
827 | | - | |
828 | | - | |
829 | | - | |
| 824 | + | |
| 825 | + | |
| 826 | + | |
| 827 | + | |
| 828 | + | |
| 829 | + | |
| 830 | + | |
830 | 831 | | |
831 | 832 | | |
832 | 833 | | |
| |||
841 | 842 | | |
842 | 843 | | |
843 | 844 | | |
844 | | - | |
| 845 | + | |
845 | 846 | | |
846 | 847 | | |
847 | 848 | | |
848 | 849 | | |
849 | | - | |
850 | 850 | | |
851 | 851 | | |
852 | 852 | | |
| |||
Lines changed: 39 additions & 17 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
177 | 177 | | |
178 | 178 | | |
179 | 179 | | |
| 180 | + | |
180 | 181 | | |
181 | 182 | | |
182 | 183 | | |
| |||
310 | 311 | | |
311 | 312 | | |
312 | 313 | | |
| 314 | + | |
| 315 | + | |
313 | 316 | | |
314 | 317 | | |
315 | 318 | | |
316 | 319 | | |
317 | 320 | | |
318 | 321 | | |
319 | | - | |
320 | | - | |
321 | | - | |
322 | | - | |
323 | 322 | | |
324 | 323 | | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
325 | 329 | | |
326 | | - | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
327 | 335 | | |
328 | 336 | | |
329 | 337 | | |
| |||
343 | 351 | | |
344 | 352 | | |
345 | 353 | | |
346 | | - | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
347 | 358 | | |
348 | | - | |
349 | | - | |
350 | | - | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
351 | 370 | | |
352 | | - | |
353 | | - | |
354 | 371 | | |
355 | 372 | | |
356 | 373 | | |
| |||
859 | 876 | | |
860 | 877 | | |
861 | 878 | | |
862 | | - | |
863 | | - | |
864 | | - | |
865 | | - | |
866 | | - | |
867 | | - | |
| 879 | + | |
| 880 | + | |
| 881 | + | |
| 882 | + | |
| 883 | + | |
| 884 | + | |
| 885 | + | |
| 886 | + | |
| 887 | + | |
| 888 | + | |
| 889 | + | |
868 | 890 | | |
869 | 891 | | |
870 | 892 | | |
| |||
Lines changed: 13 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
93 | 93 | | |
94 | 94 | | |
95 | 95 | | |
96 | | - | |
97 | | - | |
98 | | - | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
99 | 109 | | |
100 | 110 | | |
101 | 111 | | |
| |||
Lines changed: 61 additions & 22 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
69 | 69 | | |
70 | 70 | | |
71 | 71 | | |
72 | | - | |
73 | | - | |
74 | | - | |
75 | | - | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
76 | 76 | | |
77 | 77 | | |
78 | 78 | | |
79 | | - | |
80 | 79 | | |
81 | 80 | | |
82 | 81 | | |
83 | 82 | | |
| 83 | + | |
84 | 84 | | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
85 | 91 | | |
86 | 92 | | |
87 | | - | |
88 | 93 | | |
89 | 94 | | |
90 | | - | |
91 | | - | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
92 | 98 | | |
93 | 99 | | |
94 | 100 | | |
| |||
125 | 131 | | |
126 | 132 | | |
127 | 133 | | |
| 134 | + | |
128 | 135 | | |
129 | 136 | | |
130 | 137 | | |
| |||
134 | 141 | | |
135 | 142 | | |
136 | 143 | | |
137 | | - | |
138 | | - | |
139 | | - | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
140 | 147 | | |
141 | | - | |
| 148 | + | |
142 | 149 | | |
143 | 150 | | |
144 | 151 | | |
| |||
170 | 177 | | |
171 | 178 | | |
172 | 179 | | |
173 | | - | |
| 180 | + | |
174 | 181 | | |
175 | 182 | | |
176 | 183 | | |
| |||
192 | 199 | | |
193 | 200 | | |
194 | 201 | | |
195 | | - | |
196 | | - | |
197 | | - | |
198 | | - | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
199 | 207 | | |
200 | | - | |
| 208 | + | |
201 | 209 | | |
| 210 | + | |
202 | 211 | | |
203 | 212 | | |
204 | 213 | | |
205 | 214 | | |
206 | | - | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
207 | 248 | | |
| 249 | + | |
208 | 250 | | |
209 | | - | |
210 | | - | |
211 | | - | |
212 | 251 | | |
213 | 252 | | |
214 | 253 | | |
| |||
Lines changed: 60 additions & 7 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
293 | 293 | | |
294 | 294 | | |
295 | 295 | | |
296 | | - | |
297 | | - | |
298 | | - | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
299 | 314 | | |
300 | 315 | | |
301 | 316 | | |
| |||
345 | 360 | | |
346 | 361 | | |
347 | 362 | | |
348 | | - | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
349 | 368 | | |
350 | 369 | | |
351 | | - | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
| 373 | + | |
| 374 | + | |
352 | 375 | | |
353 | 376 | | |
354 | 377 | | |
| |||
470 | 493 | | |
471 | 494 | | |
472 | 495 | | |
| 496 | + | |
| 497 | + | |
| 498 | + | |
| 499 | + | |
| 500 | + | |
| 501 | + | |
| 502 | + | |
| 503 | + | |
| 504 | + | |
| 505 | + | |
| 506 | + | |
| 507 | + | |
| 508 | + | |
| 509 | + | |
| 510 | + | |
| 511 | + | |
| 512 | + | |
| 513 | + | |
| 514 | + | |
| 515 | + | |
473 | 516 | | |
474 | 517 | | |
475 | 518 | | |
| |||
532 | 575 | | |
533 | 576 | | |
534 | 577 | | |
| 578 | + | |
| 579 | + | |
535 | 580 | | |
536 | | - | |
| 581 | + | |
| 582 | + | |
| 583 | + | |
| 584 | + | |
| 585 | + | |
537 | 586 | | |
538 | 587 | | |
539 | | - | |
| 588 | + | |
| 589 | + | |
| 590 | + | |
| 591 | + | |
| 592 | + | |
540 | 593 | | |
541 | 594 | | |
542 | 595 | | |
| |||
0 commit comments