From 695e27019704ce98d228d93382dfe39c3f8001f1 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Sun, 25 Nov 2018 08:11:21 -0700 Subject: [PATCH] compiler/cm: avoid race in recompile The new path for recompiling from machine-independent files trues to read a ".zo" file without holding the recmopilation lock and without an `exn:fail:filesystem` handler. --- racket/collects/compiler/private/cm-minimal.rkt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/racket/collects/compiler/private/cm-minimal.rkt b/racket/collects/compiler/private/cm-minimal.rkt index 192fc0b54f..019db8e5ac 100644 --- a/racket/collects/compiler/private/cm-minimal.rkt +++ b/racket/collects/compiler/private/cm-minimal.rkt @@ -571,7 +571,7 @@ (raise ex))]) (compile-zo* path->mode roots path src-sha1 read-src-syntax zo-name up-to-date collection-cache #:recompile-from recompile-from - #:assume-compiled-sha1 assume-compiled-sha1 + #:assume-compiled-sha1 (force assume-compiled-sha1) #:use-existing-deps use-existing-deps))) (trace-printf "~acompiled ~a" (if recompile-from "re" "") actual-path))) (lambda () @@ -584,7 +584,8 @@ (define (build/recompile) (build #:recompile-from zo-name #:assume-compiled-sha1 (or (deps-assume-compiled-sha1 deps) - (call-with-input-file* zo-name sha1)) + ;; delay until lock is held: + (delay (call-with-input-file* zo-name sha1))) #:use-existing-deps deps)) (define src-sha1 (and zo-exists? deps