Skip to content

global: serialize package mutations - #4861

Open
aikins01 wants to merge 2 commits into
dart-lang:masterfrom
aikins01:global/serialize-package-mutations
Open

global: serialize package mutations#4861
aikins01 wants to merge 2 commits into
dart-lang:masterfrom
aikins01:global/serialize-package-mutations

Conversation

@aikins01

Copy link
Copy Markdown
Contributor

Concurrent pub processes can currently interleave activation, deactivation, repair, and stale-snapshot recompilation while updating global package state and binstubs.

This serializes those mutations with one lock beside the canonical pub cache. The lock covers Git package-name discovery, each activation source, deactivation, the global-package phase of cache repair, and snapshot recompilation together with binstub refresh. Repair uses private non-locking helpers to avoid reacquiring the lock.

The cache parent must be writable so deleting or replacing the cache cannot replace the locked inode. Readers, older pub clients, direct filesystem writers, and cache clean remain outside this coordination.

Depends on #4860 and should merge after it.

Use one canonical sibling lock so cache deletion cannot replace the locked inode. Keep repair helpers non-locking to avoid nested acquisition.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant