From 0bc010d9729bd5fcb49031dbc5510e989280c484 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Fri, 23 Nov 2018 18:12:16 -0700 Subject: [PATCH] raco setup: avoid recompilation in parallel mode The `parallel-lock-client` protocol expects a #f back when a file was meanwhile compiled by another process. So, don't just forget about a file after it is compiled, in case there is still a lock request on the way for that file. --- racket/collects/setup/parallel-build.rkt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/racket/collects/setup/parallel-build.rkt b/racket/collects/setup/parallel-build.rkt index fe8e79de18..82de732351 100644 --- a/racket/collects/setup/parallel-build.rkt +++ b/racket/collects/setup/parallel-build.rkt @@ -38,6 +38,9 @@ (hash-set! locks fn (match v + ['done + (wrkr/send wrkr (list 'compiled)) + 'done] [(list w waitlst) (hash-set! depends wrkr (cons w fn)) (let ([fns (check-cycles wrkr (hash) null)]) @@ -57,7 +60,7 @@ (for ([x (second (hash-ref locks fn))]) (hash-remove! depends x) (wrkr/send x (list 'compiled))) - (hash-remove! locks fn)])) + (hash-set! locks fn 'done)])) (define/private (check-cycles w seen fns) (cond [(hash-ref seen w #f) fns]