summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Jensen <aaronjensen@gmail.com>2023-12-30 18:06:45 -0500
committerEli Zaretskii <eliz@gnu.org>2024-01-01 22:10:27 +0200
commit6e2e34a5caa75a3430a1fb0d89900f9911c50436 (patch)
tree3d6959d3ac8bfa0053988803d043c11773494486
parent69c98b0e70ba763df481e6ee7b1c73fbd8754050 (diff)
downloademacs-6e2e34a5caa75a3430a1fb0d89900f9911c50436.tar.gz
Avoid race condition in parallel native-compilation
* lisp/emacs-lisp/comp.el (comp-delete-or-replace-file): Avoid race condition by relying on 'rename-file' being an atomic operation on Posix filesystems. (Bug#68083)
-rw-r--r--lisp/emacs-lisp/comp.el6
1 files changed, 3 insertions, 3 deletions
diff --git a/lisp/emacs-lisp/comp.el b/lisp/emacs-lisp/comp.el
index 3b2fd25e61c..f9eeef1b9e8 100644
--- a/lisp/emacs-lisp/comp.el
+++ b/lisp/emacs-lisp/comp.el
@@ -3339,9 +3339,9 @@ session."
;; Remove the old eln instead of copying the new one into it
;; to get a new inode and prevent crashes in case the old one
;; is currently loaded.
- (t (delete-file oldfile)
- (when newfile
- (rename-file newfile oldfile)))))
+ (t (if newfile
+ (rename-file newfile oldfile t)
+ (delete-file oldfile)))))
(defun comp--native-compile (function-or-file &optional with-late-load output)
"Compile FUNCTION-OR-FILE into native code.