From 134c95f1e6a574d30881cf3ccaffba5e3c39cca4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Sat, 3 Nov 2012 01:05:19 +0100 Subject: [PATCH] futures: Have workers work when futures are available. Reported by David Pirotte. * module/ice-9/futures.scm (process-futures): Wait on %FUTURES-AVAILABLE only when %FUTURES is empty. The problem was obvious when running (begin (use-modules (ice-9 threads)) (par-map 1+ (iota 400000))) : eventually, only the main thread would do the work, while the others would remain idle, waiting on %FUTURES-AVAILABLE. --- module/ice-9/futures.scm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/module/ice-9/futures.scm b/module/ice-9/futures.scm index 3c4cd7d2c..2ab3eddc8 100644 --- a/module/ice-9/futures.scm +++ b/module/ice-9/futures.scm @@ -93,8 +93,10 @@ touched." ;; Wait for futures to be available and process them. (lock-mutex %futures-mutex) (let loop () - (wait-condition-variable %futures-available - %futures-mutex) + (when (q-empty? %futures) + (wait-condition-variable %futures-available + %futures-mutex)) + (or (q-empty? %futures) (let ((future (deq! %futures))) (lock-mutex (future-mutex future))