aboutsummaryrefslogtreecommitdiffhomepage
path: root/kernel/nativelib.ml
diff options
context:
space:
mode:
authorGravatar Pierre-Marie Pédrot <pierre-marie.pedrot@inria.fr>2015-05-17 16:44:19 +0200
committerGravatar Pierre-Marie Pédrot <pierre-marie.pedrot@inria.fr>2015-05-17 16:44:19 +0200
commitb07c8f1224d63de6172567b04b9e008c4f18de1a (patch)
tree268ca754f6c54552f622affb55cb8a84c738699a /kernel/nativelib.ml
parentb14d88c8cd17ad524898b31c1772a0e8f70f19f8 (diff)
Fixing bug #4201: The native compiler is not race-free.
Instead of checking if the native compiler directory exists before creating it, we simply create it by default and catch the potential exception due to its presence.
Diffstat (limited to 'kernel/nativelib.ml')
-rw-r--r--kernel/nativelib.ml5
1 files changed, 4 insertions, 1 deletions
diff --git a/kernel/nativelib.ml b/kernel/nativelib.ml
index 605c1225c..29b6bf6de 100644
--- a/kernel/nativelib.ml
+++ b/kernel/nativelib.ml
@@ -94,7 +94,10 @@ let compile_library dir code fn =
let basename = Filename.basename fn in
let dirname = Filename.dirname fn in
let dirname = dirname / output_dir in
- if not (Sys.file_exists dirname) then Unix.mkdir dirname 0o755;
+ let () =
+ try Unix.mkdir dirname 0o755
+ with Unix.Unix_error (Unix.EEXIST, _, _) -> ()
+ in
let fn = dirname / basename in
write_ml_code fn ~header code;
let r = fst (call_compiler fn) in