[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
branch master updated: Avoid fiber deadlocks
From: |
Christopher Baines |
Subject: |
branch master updated: Avoid fiber deadlocks |
Date: |
Sun, 04 Oct 2020 05:21:37 -0400 |
This is an automated email from the git hooks/post-receive script.
cbaines pushed a commit to branch master
in repository data-service.
The following commit(s) were added to refs/heads/master by this push:
new 96b65f1 Avoid fiber deadlocks
96b65f1 is described below
commit 96b65f16fb2a6f5d568d7709a86e2307ef70fe0f
Author: Christopher Baines <mail@cbaines.net>
AuthorDate: Sun Oct 4 10:18:53 2020 +0100
Avoid fiber deadlocks
Channels don't represent some channel on which messages travel, at least
not a
very long one because it can't accommodate any messages. They simply
represent
a direct exchange of the message between a sender and receiver. Because of
this, put-message blocks the fiber, and if all the threads on the other end
are waiting for replies to be received, then you have a deadlock.
To avoid this situation, spawn new fibers to send the messages. I think this
works at least, although I'm unsure how sensible it is.
---
guix-data-service/utils.scm | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/guix-data-service/utils.scm b/guix-data-service/utils.scm
index 855c819..c50cb64 100644
--- a/guix-data-service/utils.scm
+++ b/guix-data-service/utils.scm
@@ -99,7 +99,9 @@
(define (defer-to-thread-pool-channel thunk)
(make-thread-pool-channel!)
(let ((reply (make-channel)))
- (put-message %thread-pool-channel (cons reply thunk))
+ (spawn-fiber
+ (lambda ()
+ (put-message %thread-pool-channel (cons reply thunk))))
reply))
(define (fetch-result-of-defered-thunk reply-channel)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- branch master updated: Avoid fiber deadlocks,
Christopher Baines <=