Skip to content

init: fix fork_prepare lock order for heap_main.arena_pages_lock#4

Open
dylan-conway wants to merge 1 commit into
bun-dev3-v2from
claude/fork-prepare-lock-order
Open

init: fix fork_prepare lock order for heap_main.arena_pages_lock#4
dylan-conway wants to merge 1 commit into
bun-dev3-v2from
claude/fork-prepare-lock-order

Conversation

@dylan-conway
Copy link
Copy Markdown
Member

_mi_process_fork_prepare takes heap_main.arena_pages_lock before per-heap h->arena_pages_lock. At runtime the order is the opposite: a non-main heap's mi_heap_ensure_arena_pages holds h->arena_pages_lock and calls mi_heap_zalloc_aligned(mi_heap_main(), ...) (arena.c:672→682→1498→778), which can recurse into heap_main->arena_pages_lock. AB-BA with a thread mid-first-touch when fork() is called.

Moved heap_main.arena_pages_lock to after the per-heap loop (the original placement comment was wrong — mi_heap_ensure_arena_pages short-circuits for heap_main at arena.c:675 and never allocates). _mi_process_fork_parent release order updated symmetrically.

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