actor: extract common code to ac-step function

This commit is contained in:
Helmut Merz 2025-06-17 13:35:46 +02:00
parent 91e52e7437
commit 5565a60353

View file

@ -54,10 +54,13 @@
(:method ((tsk async:task) bhv) (:method ((tsk async:task) bhv)
(let ((msg (async:rcv tsk))) (let ((msg (async:rcv tsk)))
(unless (eq (content msg) +quit-message+) (unless (eq (content msg) +quit-message+)
(ac-step tsk bhv msg)
(ac-loop tsk (async:behavior tsk))))))
(defun ac-step (tsk bhv msg)
(let ((*self* tsk)) (let ((*self* tsk))
(handler-case (funcall bhv msg) (handler-case (funcall bhv msg)
(error (error) (util:lg :error "behavior" msg error)))) (error (error) (util:lg :error "behavior" msg error)))))
(ac-loop tsk (async:behavior tsk))))))
;;;; the core (classical, i.e. Hewitt) actor API ;;;; the core (classical, i.e. Hewitt) actor API
@ -79,10 +82,8 @@
(if ok (if ok
(progn (progn
(async:set-status tsk :running) (async:set-status tsk :running)
(let ((*self* tsk)) (ac-step tsk bhv msg)
(handler-case (funcall bhv msg) (ac-loop tsk (async:behavior tsk)))
(error (error) (util:lg :error "behavior" msg error)))
(ac-loop tsk (async:behavior tsk))))
(async:set-status tsk :suspended)))) (async:set-status tsk :suspended))))
(defmethod send ((tsk async:restartable-task) msg) (defmethod send ((tsk async:restartable-task) msg)