[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnunet-scheme] 220/324: mq-impl/stream: Extract code to be shared with
From: |
gnunet |
Subject: |
[gnunet-scheme] 220/324: mq-impl/stream: Extract code to be shared with connect/fibers. |
Date: |
Tue, 21 Sep 2021 13:24:20 +0200 |
This is an automated email from the git hooks/post-receive script.
maxime-devos pushed a commit to branch master
in repository gnunet-scheme.
commit 3dccfcbdc7a7b8a14b202918fd73b29df6e96c87
Author: Maxime Devos <maximedevos@telenet.be>
AuthorDate: Wed Sep 1 19:16:05 2021 +0200
mq-impl/stream: Extract code to be shared with connect/fibers.
* gnu/gnunet/mq-impl/stream.scm (port->message-queue): Extract most
code to ...
(prepare-port-message-queue): ... this new procedure.
---
gnu/gnunet/mq-impl/stream.scm | 37 +++++++++++++++++++++++--------------
1 file changed, 23 insertions(+), 14 deletions(-)
diff --git a/gnu/gnunet/mq-impl/stream.scm b/gnu/gnunet/mq-impl/stream.scm
index 3289ee4..3a34c37 100644
--- a/gnu/gnunet/mq-impl/stream.scm
+++ b/gnu/gnunet/mq-impl/stream.scm
@@ -259,18 +259,8 @@ an appropriate @code{&undefined-key-error} is raised."
socket
(retry))))
- (define* (port->message-queue port handlers error-handler
- #:key (spawn spawn-fiber))
- "Create a message queue sending and receiving data over @var{port}.
-
-This creates some fibers with @var{spawn} (@code{spawn-fiber} by default).
-As such, @var{port} must be non-blocking if @code{spawn-fiber} is used.
-All fibers will complete when the end-of-file has been encountered.
-
-When the connection is broken, the error @code{input:regular-end-of-file}
-is injected. A half-duplex port is treated as a broken connection.
-XXX: half-duplex connections cannot always be detected
-XXX: Likewise for connect/fibers?"
+ ;; See 'port->message-queue'. Also used by connect/fibers.
+ (define* (prepare-port-message-queue port spawn)
;; TODO: closing message queues
(define rcvar (make-repeated-condition))
(define (interrupt! mq)
@@ -338,10 +328,29 @@ XXX: Likewise for connect/fibers?"
(handle-output! mq port wait!)))
(when (signal-condition! closed-condition)
(inject-error! mq 'input:regular-end-of-file)))
+ (values (lambda (mq)
+ (spawn (lambda () (start-reader! mq)))
+ (spawn (lambda () (start-writer! mq))))
+ ;; Pass this to make-message-queue as the 'sender'.
+ interrupt!))
+
+ (define* (port->message-queue port handlers error-handler
+ #:key (spawn spawn-fiber))
+ "Create a message queue sending and receiving data over @var{port}.
+
+This creates some fibers with @var{spawn} (@code{spawn-fiber} by default).
+As such, @var{port} must be non-blocking if @code{spawn-fiber} is used.
+All fibers will complete when the end-of-file has been encountered.
+
+When the connection is broken, the error @code{input:regular-end-of-file}
+is injected. A half-duplex port is treated as a broken connection.
+XXX: half-duplex connections cannot always be detected
+XXX: Likewise for connect/fibers?"
+ (define-values (start-fibers interrupt!)
+ (prepare-port-message-queue port spawn))
(define mq
(make-message-queue handlers error-handler interrupt!))
- (spawn (lambda () (start-reader! mq)))
- (spawn (lambda () (start-writer! mq)))
+ (start-fibers mq)
mq)
(define* (connect/fibers config service-name handlers error-handler
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
- [gnunet-scheme] 202/324: mq-impl/stream: Allow the write fiber to stop even if blocking., (continued)
- [gnunet-scheme] 202/324: mq-impl/stream: Allow the write fiber to stop even if blocking., gnunet, 2021/09/21
- [gnunet-scheme] 205/324: tests/mq-stream: Unbreak SIGPIPE signal handler., gnunet, 2021/09/21
- [gnunet-scheme] 203/324: tests/mq-stream: Make tests less fragile., gnunet, 2021/09/21
- [gnunet-scheme] 193/324: mq-impl/stream: Eliminate condition variable., gnunet, 2021/09/21
- [gnunet-scheme] 207/324: hat-let: Allow (dotted) variable lists with <--., gnunet, 2021/09/21
- [gnunet-scheme] 211/324: doc: Correct typo (mesage -> message), gnunet, 2021/09/21
- [gnunet-scheme] 215/324: tests/mq-stream: Use 'message-handler' macro., gnunet, 2021/09/21
- [gnunet-scheme] 218/324: mq-impl/stream: Name the reader and writer thunks., gnunet, 2021/09/21
- [gnunet-scheme] 208/324: tests/mq-stream: Don't assume setvbuf returns anything., gnunet, 2021/09/21
- [gnunet-scheme] 212/324: mq/handler: Define a macro for constructing handlers., gnunet, 2021/09/21
- [gnunet-scheme] 220/324: mq-impl/stream: Extract code to be shared with connect/fibers.,
gnunet <=
- [gnunet-scheme] 226/324: doc: Generate PDF and HTML documentation, gnunet, 2021/09/21
- [gnunet-scheme] 227/324: mq: Remove TODOs about hypothetical &malformed-message., gnunet, 2021/09/21
- [gnunet-scheme] 229/324: guix: Import missing module., gnunet, 2021/09/21
- [gnunet-scheme] 194/324: mq-impl/stream: Eliminate atomic box., gnunet, 2021/09/21
- [gnunet-scheme] 191/324: doc: Document message queue error handling., gnunet, 2021/09/21
- [gnunet-scheme] 216/324: mq: Inject errors if no appropriate message handler exists., gnunet, 2021/09/21
- [gnunet-scheme] 190/324: Correct XXX and TODO on input:regular-end-of-file., gnunet, 2021/09/21
- [gnunet-scheme] 196/324: mq-impl/stream: Stop all fibers when EOF is reached (part 1)., gnunet, 2021/09/21
- [gnunet-scheme] 201/324: tests/mq-stream: Make test more strict., gnunet, 2021/09/21
- [gnunet-scheme] 204/324: mq-impl/stream: Document implementation pitfall., gnunet, 2021/09/21