diff --git a/racket/syndicate/core.rkt b/racket/syndicate/core.rkt index c96e366..74ec045 100644 --- a/racket/syndicate/core.rkt +++ b/racket/syndicate/core.rkt @@ -43,6 +43,7 @@ retract sub unsub + patch->initial-assertions (rename-out [make-quit quit]) make-actor @@ -145,6 +146,11 @@ (define (unsub pattern) (patch trie-empty (pattern->trie ' (observe pattern)))) +(define (patch->initial-assertions p) + (when (not (trie-empty? (patch-removed p))) + (error 'patch->initial-assertions "Non-empty removed set in initial assertion patch: ~v" p)) + (patch-added p)) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define (general-transition? v) diff --git a/racket/syndicate/drivers/tcp.rkt b/racket/syndicate/drivers/tcp.rkt index 03c5774..41f9af5 100644 --- a/racket/syndicate/drivers/tcp.rkt +++ b/racket/syndicate/drivers/tcp.rkt @@ -94,13 +94,16 @@ (define control-ch (make-channel)) (thread (lambda () (tcp-listener-thread control-ch listener server-addr))) (actor #:name (list 'drivers/tcp:listen port) + #:assertions* + (patch->initial-assertions + (patch-seq + (sub (advertise (observe (tcp-channel ? server-addr ?)))) ;; monitor peer + (pub (advertise (tcp-channel ? server-addr ?))) ;; declare we might make connections + (sub (inbound (tcp-accepted ? server-addr ? ?))) ;; events from driver thread + )) tcp-listener-behavior (listener-state control-ch server-addr) - (patch-seq - (sub (advertise (observe (tcp-channel ? server-addr ?)))) ;; monitor peer - (pub (advertise (tcp-channel ? server-addr ?))) ;; declare we might make connections - (sub (inbound (tcp-accepted ? server-addr ? ?))) ;; events from driver thread - ))) + (void))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Outbound Connection diff --git a/racket/syndicate/examples/actor/example-demand-matcher-glitch-bug.buggy.msd b/racket/syndicate/examples/actor/example-demand-matcher-glitch-bug.buggy.msd new file mode 100644 index 0000000..7279869 --- /dev/null +++ b/racket/syndicate/examples/actor/example-demand-matcher-glitch-bug.buggy.msd @@ -0,0 +1,76 @@ +(#f #f name-summary ((() . "'ground"))) +(#f #s(spacetime (meta) 0) actions-produced 1) +(#f #s(spacetime (0) 1) spawn "drivers/tcp:dm:listener") +(#s(spacetime (0) 1) #s(spacetime (0) 2) actions-produced 1) +(#f #s(spacetime (1) 3) spawn "drivers/tcp:dm:connect") +(#s(spacetime (1) 3) #s(spacetime (1) 4) actions-produced 1) +(#f #s(spacetime (2) 5) spawn "connection-acceptor") +(#s(spacetime (2) 5) #s(spacetime (2) 6) actions-produced 1) +(#f #s(spacetime (3) 7) spawn "configuration-provider") +(#s(spacetime (3) 7) #s(spacetime (3) 8) actions-produced 1) +(#s(spacetime (meta) 0) #s(spacetime () 9) action-interpreted patch "- ::: nothing\n+