Skip to content

Commit 4873774

Browse files
DeusDataSS-42
andcommitted
fix(slab): O(1) aligned-page cross-thread frees + retire-on-live-count (no global hot-path lock)
Distilled from DeusData#782 keeping its retire-on-live_count correctness, replacing the global-lock+linear-scan with aligned-page O(1) lookup + per-page lock-free remote-free queue (no hot-path contention). Each 64KB slab page is allocated aligned to its own size, so the owning page of any chunk is recovered by masking the pointer; a lock-free 3-level radix page map (cold-path writes only) tells slab_free whether a masked base is a real slab page or a plain heap pointer without dereferencing an unrelated address. Owner frees hit the thread-local free list; foreign frees CAS onto that page's lock-free MPSC remote-free stack. Pages carry refcount = handed-out chunks + owner guard; reclaim/destroy retire a page that still holds foreign-live chunks and free it when the final chunk returns, so a page holding a live tree-sitter lexer chunk is never freed under it. Keeps DeusData#782's resolve-worker terminal slab teardown. Closes the DeusData#852 use-after-free and the cross-thread invalid free. Reproduce-first guards in test_mem.c are RED on main (heap-use-after-free / bad-free under ASan) and GREEN with this fix. Closes DeusData#852 Supersedes DeusData#782 Co-authored-by: SS-42 <47749027+SS-42@users.noreply.github.com> Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
1 parent 7388921 commit 4873774

4 files changed

Lines changed: 425 additions & 100 deletions

File tree

0 commit comments

Comments
 (0)