Upstream fix for a memory leak introduced in Fibers 1.1.0 that would manifest in shepherd: https://github.com/wingo/fibers/issues/65 https://issues.guix.gnu.org/58631 diff --git a/fibers/scheduler.scm b/fibers/scheduler.scm index 2b03941..760b037 100644 --- a/fibers/scheduler.scm +++ b/fibers/scheduler.scm @@ -182,8 +182,10 @@ remote kernel thread." (#f (warn "scheduler for unknown fd" fd)) ((and events+waiters (active-events . waiters)) ;; First, clear the active status, as the EPOLLONESHOT has - ;; deactivated our entry in the epoll set. - (set-car! events+waiters #f) + ;; deactivated our entry in the epoll set. Set the car to 0, not #f, so + ;; that 'schedule-tasks-for-active-fd' doesn't end up re-adding a + ;; finalizer on FD. + (set-car! events+waiters 0) (set-cdr! events+waiters '()) (unless (zero? (logand revents (logior EPOLLHUP EPOLLERR))) (hashv-remove! (scheduler-fd-waiters sched) fd)) @@ -336,21 +338,19 @@ expressed as an epoll bitfield." (let ((fd-waiters (hashv-ref (scheduler-fd-waiters sched) fd))) (match fd-waiters - ((active-events . waiters) - (set-cdr! fd-waiters (acons events task waiters)) - (unless (and active-events - (= (logand events active-events) events)) - (let ((active-events (logior events (or active-events 0)))) - (set-car! fd-waiters active-events) - (add-fdes-finalizer! fd (fd-finalizer fd-waiters)) - (epoll-add*! (scheduler-epfd sched) fd - (logior active-events EPOLLONESHOT))))) - (#f + ((or #f (#f)) ;FD is new or was finalized (let ((fd-waiters (list events (cons events task)))) (hashv-set! (scheduler-fd-waiters sched) fd fd-waiters) (add-fdes-finalizer! fd (fd-finalizer fd-waiters)) (epoll-add*! (scheduler-epfd sched) fd - (logior events EPOLLONESHOT))))))) + (logior events EPOLLONESHOT)))) + ((active-events . waiters) + (set-cdr! fd-waiters (acons events task waiters)) + (unless (= (logand events active-events) events) + (let ((active-events (logior events active-events))) + (set-car! fd-waiters active-events) + (epoll-add*! (scheduler-epfd sched) fd + (logior active-events EPOLLONESHOT)))))))) (define (schedule-task-when-fd-readable sched fd task) "Arrange to schedule @var{task} on @var{sched} when the file >tests: Ensure 'elpa' test does not access the network....Previously it would try to access the real elpa.gnu.org. This would succeed when network is available because "taxy-magit-section" is an existing package. * guix/import/elpa.scm (elpa-repository) (package-from-elpa-repository?): Recognize 'gnu/http. * tests/elpa.scm ("package-latest-release"): Use 'http' instead of 'https'. Change "taxy-magit-section" to "fake-taxy-magit-section". Ludovic Courtès 2023-05-31tests: Use quasiquoted 'match' patterns for package sexps....Turns out it's easier to read. * tests/cpan.scm ("cpan->guix-package"): Use a quasiquoted pattern. * tests/elpa.scm (eval-test-with-elpa): Likewise. * tests/gem.scm ("gem->guix-package") ("gem->guix-package with a specific version") ("gem-recursive-import") ("gem-recursive-import with a specific version"): Likewise. * tests/hexpm.scm ("hexpm-recursive-import"): Likewise. * tests/opam.scm ("opam->guix-package"): Likewise. * tests/pypi.scm ("pypi->guix-package, no wheel") ("pypi->guix-package, wheels") ("pypi->guix-package, no usable requirement file.") ("pypi->guix-package, package name contains \"-\" followed by digits"): Likewise. * tests/texlive.scm ("texlive->guix-package"): Likewise. Ludovic Courtès 2023-05-31import: elpa: Updater provides input list....* guix/import/elpa.scm (elpa-dependency->upstream-input): New procedure. (latest-release): Add 'inputs' field. * tests/elpa.scm ("package-latest-release"): New test. Ludovic Courtès 2021-12-18import: elpa: Support ‘upstream-name’ property....* guix/import/elpa.scm: (guix-package->elpa-name): New procedure. (latest-release): Use it. * tests/elpa.scm ("guix-package->elpa-name: without 'upstream-name' property") ("guix-package->elpa-name: with 'upstream-name' property"): Test it. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Xinglu Chen