X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=8sync%2Fsystems%2Factors.scm;h=9ba3818b6ff1d6f6e34b0ff33ae65ad8f29ca619;hb=66ea38606d0d57f05a4ce49a94c770d17ce31fc3;hp=c75a25aaa5de0421f775c834d82a306048295077;hpb=92bbcf8318dad8f77a8f859cd3f281688b602db8;p=8sync.git diff --git a/8sync/systems/actors.scm b/8sync/systems/actors.scm index c75a25a..9ba3818 100644 --- a/8sync/systems/actors.scm +++ b/8sync/systems/actors.scm @@ -538,13 +538,24 @@ more compact following syntax: (define (call-catching-coroutine thunk) (define (call-catching-errors) - (with-throw-handler - #t thunk - (lambda (key . args) - (if (message-needs-reply message) - ;; If the message is waiting on a reply, let them know - ;; something went wrong. - (hive-reply-with-error hive message key args))))) + ;; TODO: maybe parameterize (or attach to hive) and use + ;; maybe-catch-all from agenda.scm + ;; @@: Why not just use with-throw-handler and let the catch + ;; happen at the agenda? That's what we used to do, but + ;; it ended up with a SIGABRT. See: + ;; http://lists.gnu.org/archive/html/bug-guile/2016-05/msg00003.html + (catch #t + thunk + ;; In the actor model, we don't totally crash on errors. + (lambda _ #f) + ;; If an error happens, we raise it + (lambda (key . args) + (if (message-needs-reply message) + ;; If the message is waiting on a reply, let them know + ;; something went wrong. + (hive-reply-with-error hive message key args)) + ;; print error message + (apply print-error-and-continue key args)))) (call-with-prompt (hive-prompt hive) call-catching-errors (lambda (kont actor message) @@ -631,7 +642,7 @@ more compact following syntax: (process-remote-message)))) (define-method (hive-actor-local? (hive ) address) - (hash-ref (hive-actor-registry hive) address)) + (equal? (hive-id hive) (address-hive-id address))) (define-method (hive-register-actor! (hive ) (actor )) (hash-set! (hive-actor-registry hive) (actor-id actor) actor))