Repository navigation
fix(connect): a quit mid-download no longer wedges the relay client install #22747
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
maria-rcks
merged 6 commits into
pingdotgg:main
from
jooyyy:fix/relay-client-install-lock
Oct 30, 2026
+215
−18
Merged
Changes from all commits
Commits
Show all changes
6 commits
Select commit
Hold shift + click to select a range
978c5e7
fix(connect): a quit mid-download no longer wedges the relay client i…
jooyyy afd84e6
Merge branch 'main' into fix/relay-client-install-lock
jooyyy 2a44062
Merge branch 'main' into fix/relay-client-install-lock
jooyyy 2a576da
Merge remote-tracking branch 'github/main' into takeover-22747
maria-rcks da3a9c3
fix(connect): reclaim installer locks without removing replacements
maria-rcks 6437a99
chore: merge main
maria-rcks File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Read and stat errors are treated as "lock is gone" or "lock is empty". This skips the retry delay.
fileSystem.stat(lockPath)at Line 517 usesEffect.option. Any stat error becomesOption.none, and Line 518 then runscontinuewithout sleeping.readDirectoryfailures become[]at Line 522. Line 523 then setsrecovered = true, and Line 533 runscontinue.Only
NotFoundproves that the lock is absent. For any other error, such asEACCES,EMFILE, or a transient Windows sharing error, a live installer may still hold the lock. The loop then retries with no delay. All 100 attempts can run in well under a second, so the caller getsinstall_lockedwhile a healthy installer is still downloading. The nonrecursivermdirstill prevents wrongly reclaiming a populated lock, so the damage is a spurious failure, not data loss.Treat a failed
readDirectoryas inconclusive. Do not setrecoveredin that case, so the loop falls through toEffect.sleep. Apply the same rule to a non-NotFoundstat failure.Proposed fix for the `readDirectory` case
Based on learnings: when reading lock owner metadata, only a confirmed absence (
ENOENT) permits recovery. Treat other read errors as inconclusive.Source: Learnings