The attached Fibers program illustrates the problem: heap grows even
though it’s not supposed to.

Ludo’.

;; https://issues.guix.gnu.org/58631

(use-modules (fibers)
             (fibers channels)
             (ice-9 rdelim)
             (statprof))

(run-fibers
 (lambda ()
   (define channel
     (make-channel))
   (define leave-channel
     (make-channel))

   (spawn-fiber
    (lambda ()
      (sleep 10)
      (put-message leave-channel 'leave)))
   (spawn-fiber
    (lambda ()
      (let loop ()
        (put-message channel 'hi!)
        (get-message channel)
        (loop))))
   (spawn-fiber
    (lambda ()
      (let loop ()
        (get-message channel)
        (put-message channel 'hey!)
        (loop))))
   (spawn-fiber
    (lambda ()
      (let loop ()
        (pk 'heap-size (assoc-ref (gc-stats) 'heap-size))
        (sleep 2)
        (loop))))
   (get-message leave-channel))
 ;; #:drain? #t
 #:parallelism 1                                  ;don't create POSIX threads
 #:hz 0)

Reply via email to