Browse Source

Fix handling a message to local closer promises that aren't near

add-remove-to-filo-queue
Christopher Lemmer Webber 6 years ago
parent
commit
d3785602e3
No known key found for this signature in database
GPG Key ID: 4BC025925FF8F4D3
  1. 18
      goblins/core.rkt

18
goblins/core.rkt

@ -1244,9 +1244,17 @@
;; If we're pointing at another near promise then we recurse
;; to _handle-messages with the next promise...
[(? local-promise-refr?)
;; (We don't use call-with-resolution because the next one will!)
(_handle-message (message point-to resolve-me kws kw-vals args)
display-or-log-error)]
;; Now we need to see if it's in the same vat...
(cond
[(near-refr? point-to)
;; (We don't use call-with-resolution because the next one will!)
(_handle-message (message point-to resolve-me kws kw-vals args)
display-or-log-error)]
[else
;; Otherwise, we need to forward this message to the appropriate
;; vat
(_send-message kws kw-vals point-to resolve-me args)
`#(success ,(void))])]
;; But if it's a remote promise then we queue it in the waiting
;; messages because we prefer to have messages "swim as close
;; as possible to the machine barrier where possible", with
@ -1262,7 +1270,7 @@
point-to history
(cons msg waiting-messages)))
;; But we should return that this was deferred
'#(deferred #f)])]
'#(deferred ,(void))])]
;; Similar to the above w/ remote promises, except that we really
;; just don't know where things go *at all* yet, so no swimming
;; occurs.
@ -1272,7 +1280,7 @@
(mactor:naive resolver-unsealer resolver-tm?
listeners
(cons msg waiting-messages)))
'#(deferred #f)]
`#(deferred ,(void))]
;; Questions should forward their messages to the captp thread
;; to deal with using the relevant question-finder.
[(? mactor:question?)

Loading…
Cancel
Save