aboutsummaryrefslogtreecommitdiff
path: root/gnu/gnunet/nse
diff options
context:
space:
mode:
authorMaxime Devos <maximedevos@telenet.be>2021-09-08 17:39:07 +0200
committerMaxime Devos <maximedevos@telenet.be>2021-09-21 12:21:00 +0200
commitcebbfae04c8bfc110ed34d0e8392f24c1b11efd6 (patch)
tree9e152aad0b3d477b8e53adf1345479eefccdbe72 /gnu/gnunet/nse
parentb735e8c12641dee4936d395f8b90d68f3f25adb3 (diff)
downloadgnunet-scheme-cebbfae04c8bfc110ed34d0e8392f24c1b11efd6.tar.gz
gnunet-scheme-cebbfae04c8bfc110ed34d0e8392f24c1b11efd6.zip
nse/client: Only call 'send-start!' after 'mq' has been defined.
This addresses a theoretical race condition. * gnu/gnunet/nse/client.scm (connect)[mq-defined]: New variable. (connect)[error-handler]: Wait on new variable. (connect)[mq]: Signal new condition after 'mq' is defined.
Diffstat (limited to 'gnu/gnunet/nse')
-rw-r--r--gnu/gnunet/nse/client.scm8
1 files changed, 8 insertions, 0 deletions
diff --git a/gnu/gnunet/nse/client.scm b/gnu/gnunet/nse/client.scm
index 194eaac..4420d23 100644
--- a/gnu/gnunet/nse/client.scm
+++ b/gnu/gnunet/nse/client.scm
@@ -44,6 +44,8 @@
44 make-atomic-box atomic-box-ref atomic-box-set!) 44 make-atomic-box atomic-box-ref atomic-box-set!)
45 (only (fibers) 45 (only (fibers)
46 spawn-fiber) 46 spawn-fiber)
47 (only (fibers conditions)
48 make-condition wait signal-condition!)
47 (only (gnu extractor enum) 49 (only (gnu extractor enum)
48 symbol-value value->index) 50 symbol-value value->index)
49 (only (guile) 51 (only (guile)
@@ -152,10 +154,15 @@ The procedures @var{updated}, @var{connected} and @var{disconnected} are optiona
152 (set%! /:message-header '(type) s 154 (set%! /:message-header '(type) s
153 (value->index (symbol-value message-type msg:nse:start))) 155 (value->index (symbol-value message-type msg:nse:start)))
154 (send-message! mq s)) 156 (send-message! mq s))
157 (define mq-defined (make-condition))
155 (define (error-handler error) 158 (define (error-handler error)
156 (case error 159 (case error
157 ;; TODO report input errors? 160 ;; TODO report input errors?
158 ((connection:connected) 161 ((connection:connected)
162 ;; Make sure the message queue is actually bound to the variable
163 ;; @var{mq} before calling @code{send-start!}, as @code{send-start!}
164 ;; uses @var{mq}.
165 (wait mq-defined)
159 (send-start!) 166 (send-start!)
160 (when connected (connected))) 167 (when connected (connected)))
161 ;; TODO this means the server has closed the connection ... 168 ;; TODO this means the server has closed the connection ...
@@ -165,4 +172,5 @@ The procedures @var{updated}, @var{connected} and @var{disconnected} are optiona
165 (values)))) 172 (values))))
166 (define mq (connect/fibers config "nse" handlers error-handler 173 (define mq (connect/fibers config "nse" handlers error-handler
167 #:spawn spawn)) 174 #:spawn spawn))
175 (signal-condition! mq-defined)
168 (%make-server estimate/box)))) 176 (%make-server estimate/box))))