Ludovic Courtès skribis: > Consider this code: > > ;; 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)) > > On Guile 3.0.8, this program exhibits seemingly unbounded heap growth. This is fixed by the patch below (tested against the test case above and the Fibers and Shepherd test cases mentioned before):