BRO-046: idle pager leaks 19 ULOG mmaps/sec — every session dies of VMA exhaustion in ~57 min

Now
DONE
Now
OPEN
Sev
CRIT
Ask
gritzko
Env
Linux 6.18, vm.max_map_count=65530, jab ~/bin/jab, journal main tree
Rev
///be#aaa8016d
Rep
///be
On1
ABC-020
See
BE-050

A long-running pager with NOBODY TOUCHING IT leaks 19.2 file mappings per second and dies. The 100 ms key-wait spin calls _ciBadge() per pass; the badge pays two uncached treeAt climbs, each mmapping a .be ULOG that nothing ever unmaps. At vm.max_map_count (65530, ~57 min) every mmap fails and the process spins in the kernel forever. Observed live as be todo at 462% CPU / 71.0g VIRT (evidence); reproduced identically by jab log, so this is EVERY pager, not the todo view.

Input

Context

Live incident 2026-08-05 (gritzko, main tree): be todo pid 13475, 1h54m old, 71.0g 462% 12% be todo. Read-only forensics on /proc plus a clean pty re-run (ptyprobe.py, evidence).

Goals

An idle pager costs ZERO file opens per tick and a session's VMA count plateaus, so a pager left open all day neither grows nor slows.

Constraints

Pager context changes ONLY by navigation (BRO-024, pager-context-only-changes-by-nav) — so a context-keyed memo is sound and invalidates on nav.

WIP

Design decisions

TODOs

Blockers and bummers

Outcome