gnunet-svn
[Top][All Lists]
Advanced

[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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]