diff options
author | Christopher Allan Webber <cwebber@dustycloud.org> | 2017-01-29 23:10:13 -0600 |
---|---|---|
committer | Christopher Allan Webber <cwebber@dustycloud.org> | 2017-01-29 23:10:13 -0600 |
commit | 17e72389d61d35970bf0de07121b7aa26e11221a (patch) | |
tree | 3e31b93dc257c793a0b9a641798f4026e2664f03 | |
parent | 48dffb1698035eb3e0eed696e2c296e26412b7d7 (diff) | |
download | 8sync-17e72389d61d35970bf0de07121b7aa26e11221a.tar.gz |
actors: Avoid building up stack of error handlers when resuming coroutines.
However it's not clear that we're not still building up a stack of
prompts. :\
* 8sync/actors.scm (hive-process-message): Avoid building up stack of
error handlers when resuming coroutines.
-rw-r--r-- | 8sync/actors.scm | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/8sync/actors.scm b/8sync/actors.scm index fdeccf3..ceb2980 100644 --- a/8sync/actors.scm +++ b/8sync/actors.scm @@ -562,7 +562,9 @@ to come after class definition." message)) actor)) - (define (call-catching-coroutine thunk) + ;; TODO: I'm pretty sure we're building up another stack of prompts here + ;; with the way we're doing this. That's a real problem. + (define* (call-catching-coroutine thunk #:optional (catch-errors #t)) (define queued-error-handling-thunk #f) (define (call-catching-errors) ;; TODO: maybe parameterize (or attach to hive) and use @@ -591,7 +593,9 @@ to come after class definition." (if queued-error-handling-thunk (8sync (queued-error-handling-thunk)))) (call-with-prompt (hive-prompt hive) - call-catching-errors + (if catch-errors + call-catching-errors + thunk) (lambda (kont actor message send-options) ;; Register the coroutine (hash-set! (hive-waiting-coroutines hive) @@ -641,7 +645,9 @@ to come after class definition." result)) (#f (throw 'no-waiting-coroutine "message in-reply-to tries to resume nonexistent coroutine" - message)))))) + message)))) + ;; no need to catch errors here, there's already an error handler + #f)) ;; Unhandled action for a reply! (else (throw 'hive-unresumable-coroutine |