From 2b466db59b6bdbe012889ec8d7f0218c9b8f40a3 Mon Sep 17 00:00:00 2001
From: Michael Kuron <m.kuron@gmx.de>
Date: Thu, 29 Apr 2021 09:28:57 +0200
Subject: [PATCH] atomically write cache status file

---
 pystencils/cpu/cpujit.py | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/pystencils/cpu/cpujit.py b/pystencils/cpu/cpujit.py
index 4da43010a..dfb33e74b 100644
--- a/pystencils/cpu/cpujit.py
+++ b/pystencils/cpu/cpujit.py
@@ -52,7 +52,7 @@ import subprocess
 import textwrap
 from collections import OrderedDict
 from sysconfig import get_paths
-from tempfile import TemporaryDirectory
+from tempfile import TemporaryDirectory, NamedTemporaryFile
 
 import numpy as np
 from appdirs import user_cache_dir, user_config_dir
@@ -221,7 +221,9 @@ def read_config():
             shutil.rmtree(config['cache']['object_cache'], ignore_errors=True)
 
         create_folder(config['cache']['object_cache'], False)
-        json.dump(config['compiler'], open(cache_status_file, 'w'), indent=4)
+        with NamedTemporaryFile('w', dir=os.path.dirname(cache_status_file), delete=False) as f:
+            json.dump(config['compiler'], f, indent=4)
+        os.replace(f.name, cache_status_file)
 
     if config['compiler']['os'] == 'windows':
         from pystencils.cpu.msvc_detection import get_environment
-- 
GitLab