;;;; A dyn global that outlives the run that filled it. ;;;; ;;;; The park is not a quiet state: the daemon services evaluated thunks on ;;;; the parked thread, a thunk allocates, and an allocation collects. So the ;;;; question this program is built to ask is whether the roots the emitted ;;;; main pushed for its dyn globals are still on the collector's stack after ;;;; the run that pushed them has finished — because the park cuts that stack ;;;; back, and cutting it back to empty took the globals with the frames. ;;;; ;;;; [config] is a map rather than a number on purpose: a dyn number is an ;;;; immediate word and survives an unrooted heap by not being on it, so it ;;;; would answer the same whether or not the root was there. What is stored ;;;; is a heap object, and reading it back is a read of heap memory. ;;;; ;;;; main returns immediately: the run has nothing to do but fill the global, ;;;; and everything this fixture is for happens after it. (import agent "vendor:agent") (defonce config dyn) (defn main [] i32 (agent/start "/tmp/flan-dev-dyn-global-fallback.sock") (set config {:s "kept" :n 1}) 0)