X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;ds=sidebyside;f=8sync%2Factors.scm;fp=8sync%2Factors.scm;h=1dab9d7918ea62b481722123aeee03513ec12965;hb=17830fd9912894b6a30a5c4a4a83722a74c01ccd;hp=8aa38e325f5f2dfe6b79577d0d8ff5486dbcb666;hpb=bac7d5aece0b6687f7f55a235ae7c2969ea6d184;p=8sync.git diff --git a/8sync/actors.scm b/8sync/actors.scm index 8aa38e3..1dab9d7 100644 --- a/8sync/actors.scm +++ b/8sync/actors.scm @@ -705,8 +705,13 @@ Like create-actor, but permits supplying an id-cookie." init id-cookie)) -(define (self-destruct actor) - "Remove an actor from the hive." +(define* (self-destruct actor #:key (clean-up #t)) + "Remove an actor from the hive. + +Unless #:clean-up is set to #f, this will first have the actor handle +its '*clean-up* action handler." + (when clean-up + (<-wait actor (actor-id actor) '*clean-up*)) (hash-remove! (hive-actor-registry (actor-hive actor)) (actor-id actor))) @@ -715,7 +720,8 @@ Like create-actor, but permits supplying an id-cookie." ;;; 8sync bootstrap utilities ;;; ========================= -(define* (run-hive hive initial-tasks) +(define* (run-hive hive initial-tasks + #:key (clean-up #t)) "Start up an agenda and run HIVE in it with INITIAL-TASKS." (dynamic-wind (const #f) @@ -726,7 +732,8 @@ Like create-actor, but permits supplying an id-cookie." (start-agenda agenda))) ;; Run clean-up (lambda () - (run-hive-clean-up hive)))) + (when clean-up + (run-hive-clean-up hive))))) (define (run-hive-clean-up hive) (let ((queue (list->q (list (bootstrap-message hive (actor-id hive)