diff options
author | Maxime Devos <maximedevos@telenet.be> | 2021-09-06 21:53:56 +0200 |
---|---|---|
committer | Maxime Devos <maximedevos@telenet.be> | 2021-09-21 12:20:58 +0200 |
commit | fb8b1e5b3df15b246cd4404dcaa3bb5bf5e90634 (patch) | |
tree | 1f74325fc51a8b36613f80ce01814bc2b55cd8bc /tests | |
parent | 75867c24192f49e76fbe31ce0dd8e774a2eac929 (diff) | |
download | gnunet-scheme-fb8b1e5b3df15b246cd4404dcaa3bb5bf5e90634.tar.gz gnunet-scheme-fb8b1e5b3df15b246cd4404dcaa3bb5bf5e90634.zip |
mq-impl/stream: Allow closing the queue on request.
* gnu/gnunet/mq.scm
(make-message-queue): Accept optional 'closer' argument.
(close-queue!): New procedure.
* gnu/gnunet/mq-impl/stream.scm
(prepare-port-message-queue): Remove fixed TODO. Also return
'close!'.
(prepare-port-message-queue)[request-close-condition]: New variable.
(prepare-port-message-queue)[start-reader!]{wait-op}: Wait on
request-close-condition and escape.
(prepare-port-message-queue)[close!]: New procedure.
(port->message-queue): Accept 'close!' from
'prepare-port-message-queue'. Pass it to the message queue
constructor.
(connect/fibers): Accept 'close!' from
'prepare-port-message-queue'. Pass it to 'make-message-queue'.
Note a TODO.
* tests/mq-stream.scm
("fibers stop and port closed after close! (directly after creation)")
("fibers stop and port closed after close! (some times passes)"):
New tests.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/mq-stream.scm | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/tests/mq-stream.scm b/tests/mq-stream.scm index e16aa1b..f5a56e6 100644 --- a/tests/mq-stream.scm +++ b/tests/mq-stream.scm | |||
@@ -729,4 +729,26 @@ If an EPIPE system error is raised, return #f." | |||
729 | (port-closed? alpha)) | 729 | (port-closed? alpha)) |
730 | #:parallelism 1)) ; to make the use of yield-many less fragile | 730 | #:parallelism 1)) ; to make the use of yield-many less fragile |
731 | 731 | ||
732 | (test-assert "fibers stop and port closed after close! (directly after creation)" | ||
733 | (let^ ((<-- (alpha beta) (two-sockets))) | ||
734 | (call-with-spawner/wait | ||
735 | (lambda (spawn) | ||
736 | (define q (port->message-queue alpha no-handlers error-handler/regular | ||
737 | #:spawn spawn)) | ||
738 | (close-queue! q)) | ||
739 | #:parallelism 1) | ||
740 | (port-closed? alpha))) | ||
741 | |||
742 | (test-assert "fibers stop and port closed after close! (some times passes)" | ||
743 | (let^ ((<-- (alpha beta) (two-sockets))) | ||
744 | (call-with-spawner/wait | ||
745 | (lambda (spawn) | ||
746 | (define q (port->message-queue alpha no-handlers error-handler/regular | ||
747 | #:spawn spawn)) | ||
748 | (yield-many) | ||
749 | (sleep 0.01) | ||
750 | (close-queue! q)) | ||
751 | #:parallelism 1) | ||
752 | (port-closed? alpha))) | ||
753 | |||
732 | (test-end "mq-stream") | 754 | (test-end "mq-stream") |