From 91e52e74372c17f459592e684fdf9b1cc5dc19fd Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Tue, 17 Jun 2025 10:40:21 +0200 Subject: [PATCH] actor: improve handling of standard (looping) task, use behavior slot --- core/actor.lisp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/core/actor.lisp b/core/actor.lisp index 19e80cc..8b4fe35 100644 --- a/core/actor.lisp +++ b/core/actor.lisp @@ -40,6 +40,7 @@ (defconstant +quit-message+ (gensym "QUIT")))) (defun start (tsk bhv &key foreground) + (setf (async:behavior tsk) bhv) (if foreground (ac-loop tsk bhv) (async:submit-task tsk #'ac-loop tsk bhv))) @@ -50,13 +51,13 @@ (defvar *self* nil) (defgeneric ac-loop (tsk bhv) - (:method ((tsk async:mailbox) bhv) - (let ((msg (async:rcv tsk)) - result) + (:method ((tsk async:task) bhv) + (let ((msg (async:rcv tsk))) (unless (eq (content msg) +quit-message+) (let ((*self* tsk)) - (setf result (funcall bhv msg))) - (ac-loop tsk (or result bhv)))))) + (handler-case (funcall bhv msg) + (error (error) (util:lg :error "behavior" msg error)))) + (ac-loop tsk (async:behavior tsk)))))) ;;;; the core (classical, i.e. Hewitt) actor API @@ -64,7 +65,7 @@ (async:make-task bhv :restartable t)) (defgeneric send (tsk msg) - (:method ((tsk async:mailbox) msg) + (:method ((tsk async:task) msg) (async:snd tsk msg))) (defun become (bhv) @@ -80,7 +81,7 @@ (async:set-status tsk :running) (let ((*self* tsk)) (handler-case (funcall bhv msg) - (error (error) (util:lg :error "handling message" msg error))) + (error (error) (util:lg :error "behavior" msg error))) (ac-loop tsk (async:behavior tsk)))) (async:set-status tsk :suspended))))