Roughly 1 in 2 runs of tests/workers.scm fails on my system. Output: ======================================================== GNU Guix 0.13.0.3413-984e3-dirty: ./test-suite.log ========================================================
# TOTAL: 1 # PASS: 0 # SKIP: 0 # XFAIL: 0 # FAIL: 1 # XPASS: 0 # ERROR: 0 .. contents:: :depth: 2 FAIL: tests/workers =================== test-name: enqueue location: /home/users/bavier/src/guix/tests/workers.scm:26 source: + (test-equal + "enqueue" + 4242 + (let* ((pool (make-pool)) + (result 0) + (#{1+!}# (let ((lock (make-mutex))) + (lambda () + (with-mutex lock (set! result (+ result 1))))))) + (let loop ((i 4242)) + (unless + (zero? i) + (pool-enqueue! pool #{1+!}#) + (loop (- i 1)))) + (let poll () + (unless + (pool-idle? pool) + (pk 'busy result) + (sleep 1) + (poll))) + result)) expected-value: 4242 actual-value: 4241 result: FAIL To me the reason seems to be that the 'pool-idle? procedure indicates whether or not the task queue is empty, not whether all tasks have completed execution, so the poll loop exits before all 1+! updates are finished and the test fails. Most failures show "actual-value: 4241", but I have also seen "actual-value: 4239" and "actual-value: 4240", which points to a race condition. On this system '(current-processor-count) => 128' Eric Bavier, Scientific Libraries, Cray Inc.