actors: Fix resuming continuation when waiting on message.
authorChristopher Allan Webber <cwebber@dustycloud.org>
Mon, 25 Apr 2016 17:51:09 +0000 (12:51 -0500)
committerChristopher Allan Webber <cwebber@dustycloud.org>
Mon, 25 Apr 2016 17:51:09 +0000 (12:51 -0500)
Pattern matching was wrong.  Also added an error check.

* 8sync/systems/actors.scm (hive-process-message): Fix pattern match.
  Add error check that we're resuming to the correct actor.

8sync/systems/actors.scm

index ce55597bf912aa001282e65cbac055c872a7b991..f9b9047ac4a83fc1d06e82bb798422c0f7750dae 100644 (file)
@@ -464,7 +464,14 @@ more compact following syntax:
   (define (resume-waiting-coroutine)
     (match (hash-remove! (hive-waiting-coroutines hive)
                          (message-in-reply-to message))
   (define (resume-waiting-coroutine)
     (match (hash-remove! (hive-waiting-coroutines hive)
                          (message-in-reply-to message))
-      ((_ . kont)
+      ((_ . (resume-actor-id . kont))
+       (if (not (equal? (message-to message)
+                        resume-actor-id))
+           (throw 'resuming-to-wrong-actor
+                  "Attempted to resume a coroutine to the wrong actor!"
+                  #:expected-actor-id (message-to message)
+                  #:got-actor-id resume-actor-id
+                  #:message message))
        (kont message))
       (#f (throw 'no-waiting-coroutine
                  "message in-reply-to tries to resume nonexistent coroutine"
        (kont message))
       (#f (throw 'no-waiting-coroutine
                  "message in-reply-to tries to resume nonexistent coroutine"