Hi Ludovic, Ludovic Courtès <l...@gnu.org> writes:
> (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: > > ;; 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. > Uncommenting the local ‘with-dynamic-state’ definition fixes the > problem. I've tested both 3.0.8 from Guix on multiple machines (including Berlin) and 2.2 from Debian 10, and ran the above snippet; it grows initially but stabilize quickly and then doesn't budge. I've let it run for more than an hour. So there's a problem there (?), but it doesn't seem like an unbound leak from my experiments. Perhaps the reproducer needs to be tweaked to mimic better what is happening in Shepherd? -- Thanks, Maxim