Split build-dir lock into dedicated lock #16708
Merged
epage merged 1 commit intorust-lang:masterfrom Mar 6, 2026
Merged
Conversation
This commit seperates the `build-dir` and `artifact-dir` locks so that an exclusive lock on `artifact-dir` does not force an exclusive lock on `build-dir` and vise-versa. The motivation of this change is for fine grain locking to work even when `build-dir` == `artifact-dir`
epage
reviewed
Mar 5, 2026
Contributor
There was a problem hiding this comment.
Should we also rename .cargo-lock to .cargo-artifact-lock?
That could negatively impact cross-version builds.
Which gets me thinking, does this PR negatively impact cross-version builds?
- this only impacts users who have a shared artifact and build dir
- this only impacts users who grab only the build dir lock
- this only impacts state that is not scoped by the hash of the cargo/rustc version
That seems relatively small
Member
There was a problem hiding this comment.
this only impacts state that is not scoped by the hash of the cargo/rustc version
The most common scenario that hash may collides is using different nightly toolchains, though
- Rustc bootstrap IIRC doesn't run different nightly in paralell
- Tools like
cargo-bisect-rustcruns in serial.
Agree with the analysis!
epage
approved these changes
Mar 5, 2026
weihanglo
approved these changes
Mar 6, 2026
Member
There was a problem hiding this comment.
this only impacts state that is not scoped by the hash of the cargo/rustc version
The most common scenario that hash may collides is using different nightly toolchains, though
- Rustc bootstrap IIRC doesn't run different nightly in paralell
- Tools like
cargo-bisect-rustcruns in serial.
Agree with the analysis!
rust-bors bot
pushed a commit
to rust-lang/rust
that referenced
this pull request
Mar 13, 2026
Update cargo submodule 21 commits in 90ed291a50efc459e0c380d7b455777ed41c6799..cbb9bb8bd0fb272b1be0d63a010701ecb3d1d6d3 2026-03-05 15:11:25 +0000 to 2026-03-13 14:34:16 +0000 - fix(git): preserve SCP-like submodule URLs for fetch (rust-lang/cargo#16744) - Fix 16732 (rust-lang/cargo#16746) - fix(rustdoc): switch to new `--emit` options (rust-lang/cargo#16739) - fix(git): convert SCP-like submodule URLs to ssh:// format (rust-lang/cargo#16727) - fix(core): typo (rust-lang/cargo#16738) - CARGO_TARGET_DIR doesn't have to be relative (rust-lang/cargo#16735) - chore(ci): Detect user changes to src/etc/man (rust-lang/cargo#16736) - util: Exclude from iCloud Drive sync on macOS (rust-lang/cargo#16728) - fix(compile): Stop on denying warnings without --keep-going (rust-lang/cargo#16725) - feat(shell): Support OSC 9;4 progress on ptyxis (rust-lang/cargo#16730) - Let git decide when to run gc (rust-lang/cargo#16459) - chore(deps): update cargo-semver-checks to v0.47.0 (rust-lang/cargo#16723) - fix(compile): Turn warning summaries into errors also (rust-lang/cargo#16721) - fix(fix): Switch from ad-hoc to structured warnings (rust-lang/cargo#16711) - fix: ignore implicit std dependencies in `unused-crate-dependencies` lint (rust-lang/cargo#16677) - chore(deps): update msrv (3 versions) to v1.92 (rust-lang/cargo#16716) - chore(deps): update msrv (1 version) to v1.94 (rust-lang/cargo#16710) - fix(script): surpress `unused_features` lint for embedded (rust-lang/cargo#16714) - Split `build-dir` lock into dedicated lock (rust-lang/cargo#16708) - Add missing truncate when writing .crate files (rust-lang/cargo#16688) - refactor(fix): Prep for annotate-snippets (rust-lang/cargo#16702)
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
What does this PR try to resolve?
This PR separates the
build-dirandartifact-dirlocks so that an exclusive lock onartifact-dirdoes not force an exclusive lock onbuild-dirand vise-versa.The motivation of this change is for fine grain locking to work even when
build-dir==artifact-dir(the default)However, note that this does NOT feature gate the lock file renaming as build-dir is not considered to be part of the public interface of Cargo.
Tracking issue: #4282
How to test and review this PR?
See the updated tests in
build_dir.rsAlso note that while testing this change I discovered a separate bug around
cargo package.For now I opened a separate issue (#16707) added a FIXME to make it clear that the tests describe the current behavior, its not ideal.
Open Questions
.cargo-build-lock?.cargo-prefix would be nice for consistency..cargo-lockto.cargo-artifact-lock?r? @epage