diff options
author | Maxime Devos <maximedevos@telenet.be> | 2021-09-08 17:39:07 +0200 |
---|---|---|
committer | Maxime Devos <maximedevos@telenet.be> | 2021-09-21 12:21:00 +0200 |
commit | cebbfae04c8bfc110ed34d0e8392f24c1b11efd6 (patch) | |
tree | 9e152aad0b3d477b8e53adf1345479eefccdbe72 /gnu/gnunet/nse | |
parent | b735e8c12641dee4936d395f8b90d68f3f25adb3 (diff) | |
download | gnunet-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.scm | 8 |
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)))) |