Hi, I am trying to test an actor I wrote with 8sync. I created a probe actor which sends messages to the main one. A problem I am having is that when I want to send a *cleanup* to the main (server) actor from the probe, I am getting the following backtrace:
--8<---------------cut here---------------start------------->8--- λ guile --debug -s tests/test.scm Backtrace: In ice-9/boot-9.scm: 1736:10 11 (with-exception-handler _ _ #:unwind? _ # _) In unknown file: 10 (apply-smob/0 #<thunk 7fac09a7b9a0>) In ice-9/boot-9.scm: 718:2 9 (call-with-prompt _ _ #<procedure default-prompt-handle…>) In ice-9/eval.scm: 619:8 8 (_ #(#(#<directory (guile-user) 7fac096a0f00>))) In ice-9/boot-9.scm: 2806:4 7 (save-module-excursion _) 4351:12 6 (_) In 8sync/actors.scm: 812:6 5 (run-hive #<<hive> 7fac08bdd0c0> _ #:cleanup _ # _) In ice-9/control.scm: 91:24 4 (call-with-escape-continuation _) In 8sync/agenda.scm: 569:6 3 (run-agenda #<<agenda> queue: (() . #f) prompt-tag: ("…> …) 470:7 2 (update-agenda-from-select! #<<agenda> queue: (() . #f)…>) In ice-9/boot-9.scm: 1731:15 1 (with-exception-handler #<procedure 7fac08bbd240 at ic…> …) In unknown file: 0 (select (#<closed: file 7fac07ff6460>) () () #f #f) ERROR: In procedure select: In procedure select: Wrong type argument in position 1: #<closed: file 7fac07ff6460> --8<---------------cut here---------------end--------------->8--- I have attached a simple snippet to reproduce the problem, and also a naive patch I did. I am not sure if it is me doing the shutdown wrong, or it's a bug. -- Alexey
>From 020cdb7f7915876ff808b37430846a26dfab702b Mon Sep 17 00:00:00 2001 From: Alexey Abramov <leven...@mmer.org> Date: Mon, 3 May 2021 16:53:04 +0200 Subject: [PATCH] agenda: Honor closed ports * 8sync/agenda.scm (update-agenda-from-select!)[ports-to-select?]: Cleanup ports which have been closed, before monitoring them with select. --- 8sync/agenda.scm | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/8sync/agenda.scm b/8sync/agenda.scm index e91487e..6b851a8 100644 --- a/8sync/agenda.scm +++ b/8sync/agenda.scm @@ -514,6 +514,13 @@ Also handles sleeping when all we have to do is wait on the schedule." (not (= (hash-count (const #t) (selector agenda)) 0))) + (define (drop-closed-ports! table) + (for-each (lambda (port) + (when (port-closed? port) + (hash-remove! table port))) + (hash-keys table))) + (drop-closed-ports! (agenda-write-port-map agenda)) + (drop-closed-ports! (agenda-read-port-map agenda)) (or (has-items? agenda-read-port-map) (has-items? agenda-write-port-map))) -- 2.31.1
test.scm
Description: Binary data