(address . bug-guile@gnu.org)(name . Olivier Dion)(address . olivier-dion@proton.me)
From: Olivier Dion <olivier-dion@proton.me>
If `join-thread' timeout, the thread mutex is not unlocked,
resulting in deadlock to the next call to it or deadlock of the
thread itself when it terminates.
Thus, always unlock the mutex.
Fix: #55356
* module/ice-9/threads.scm (join-thread): Always unlock thread mutex.
---
module/ice-9/threads.scm | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
Toggle diff (17 lines)
diff --git a/module/ice-9/threads.scm b/module/ice-9/threads.scm
index c42bd266f..962caee70 100644
--- a/module/ice-9/threads.scm
+++ b/module/ice-9/threads.scm
@@ -197,7 +197,9 @@ terminates, unless the target @var{thread} has already terminated."
(wait-condition-variable cv mutex timeout)
(wait-condition-variable cv mutex))
(lp))
- (else timeoutval))))))
+ (else
+ (unlock-mutex mutex)
+ timeoutval))))))
(define* (try-mutex mutex)
"Try to lock @var{mutex}. If the mutex is already locked, return
--
2.39.1