]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix flymake-proc temporary file deletion bug
authorJoel Rosdahl <joel@rosdahl.net>
Wed, 28 Aug 2019 19:00:00 +0000 (21:00 +0200)
committerNoam Postavsky <npostavs@gmail.com>
Sat, 7 Sep 2019 20:51:24 +0000 (16:51 -0400)
* list/progmodes/flymake-proc.el (flymake-proc-create-temp-inplace):
Include a time string part (hour + minute + second + nanosecond) in
the temporary name to make it unique enough.
(flymake-proc-legacy-flymake): Store temporary file names in the
process for usage in the sentinel.
(flymake-proc--process-sentinel): Bind values of temporary file names
dynamically to values stored in the process so that the cleanup
function will delete the correct temporary file(s).

Fixes bug#31981.

lisp/progmodes/flymake-proc.el

index 2d5a47a079784595d5dba264449cad90967fc62f..f08ba2f36817c462dcd2bcce90be7a3e7f3a9508 100644 (file)
@@ -654,7 +654,14 @@ Create parent directories as needed."
                    (let ((cleanup-f (flymake-proc--get-cleanup-function
                                      (buffer-file-name))))
                      (flymake-log 3 "cleaning up using %s" cleanup-f)
-                     (funcall cleanup-f))))
+                     ;; Make cleanup-f see the temporary file names
+                     ;; created by its corresponding init function
+                     ;; (bug#31981).
+                     (let ((flymake-proc--temp-source-file-name
+                            (process-get proc 'flymake-proc--temp-source-file-name))
+                           (flymake-proc--temp-master-file-name
+                            (process-get proc 'flymake-proc--temp-master-file-name)))
+                       (funcall cleanup-f)))))
                (kill-buffer output-buffer)))))))
 
 (defun flymake-proc--panic (problem explanation)
@@ -824,6 +831,10 @@ can also be executed interactively independently of
                   (process-put proc 'flymake-proc--output-buffer
                                (generate-new-buffer
                                 (format " *flymake output for %s*" (current-buffer))))
+                  (process-put proc 'flymake-proc--temp-source-file-name
+                               flymake-proc--temp-source-file-name)
+                  (process-put proc 'flymake-proc--temp-master-file-name
+                               flymake-proc--temp-master-file-name)
                   (setq flymake-proc--current-process proc)
                   (flymake-log 2 "started process %d, command=%s, dir=%s"
                                (process-id proc) (process-command proc)
@@ -865,6 +876,7 @@ can also be executed interactively independently of
   (let* ((ext (file-name-extension file-name))
         (temp-name (file-truename
                     (concat (file-name-sans-extension file-name)
+                             "_" (format-time-string "%H%M%S%N")
                             "_" prefix
                             (and ext (concat "." ext))))))
     (flymake-log 3 "create-temp-inplace: file=%s temp=%s" file-name temp-name)