(This is a followup to <https://github.com/wingo/fibers/issues/65>, itself a followup to <https://issues.guix.gnu.org/58631>.)
Consider this code: --8<---------------cut here---------------start------------->8--- ;; https://issues.guix.gnu.org/58631 ;; https://github.com/wingo/fibers/issues/65 (define loss (make-vector 1000000)) (let ((tag (make-prompt-tag "my prompt"))) (define handler (lambda (k i) (when (zero? (modulo i 2000000)) (pk 'heap-size (assoc-ref (gc-stats) 'heap-size))) (call-with-prompt tag (lambda () (k (modulo (+ 1 i) 10000000))) handler))) (call-with-prompt tag (let ((state (current-dynamic-state))) (lambda () ;; (define (with-dynamic-state state thunk) ;; (let ((previous #f)) ;; (dynamic-wind ;; (lambda () (set! previous (set-current-dynamic-state state))) ;; thunk ;; (lambda () (set-current-dynamic-state previous))))) (with-dynamic-state state (lambda () (let loop ((i 0)) (loop (abort-to-prompt tag i))))))) handler)) --8<---------------cut here---------------end--------------->8--- On Guile 3.0.8, this program exhibits seemingly unbounded heap growth. Uncommenting the local ‘with-dynamic-state’ definition fixes the problem. Ludo’.