Philipp Stephani writes: Hi Philipp, > Sorry for being imprecise. Yes, I mean quoted filenames. (It's > possible that the issue also arises for true remote filenames, but I > haven't checked.) "True remote filename" is still a wrong phrase. Quoted file names and remote file names play different games. > You can easily reproduce user-facing problems. Assuming you have some > binary installed that would check Java files using the legacy backend: > > $ touch /tmp/{a,b}.java > $ emacs -Q -eval '(progn (add-hook (quote prog-mode-hook) (quote > flymake-mode)) (ediff "/:/tmp/a.java" "/:/tmp/b.java"))' > > And Emacs immediately hangs because it runs into the endless loop. > Stacktrace in this case is > > Debugger entered--Lisp error: (quit) > display-warning((flymake flymake-proc) "Failed to delete dir /, > error ignored" :error "*Flymake log*") > flymake--log-1(1 flymake-proc "Failed to delete dir %s, error > ignored" "/") > flymake-proc--safe-delete-directory("/") > flymake-proc--delete-temp-directory("/tmp/:/tmp/") > flymake-proc-simple-java-cleanup() > #f(compiled-function () #)() > flymake-proc-legacy-flymake(#f(compiled-function (&rest args) > #)) > flymake--run-backend(flymake-proc-legacy-flymake) > #f(compiled-function (backend) #) > (flymake-proc-legacy-flymake) > run-hook-wrapped(#f(compiled-function (backend) # 0x117b195>) flymake-proc-legacy-flymake) > flymake-start((post-command) nil) > #f(compiled-function () #)() > set-window-buffer(nil #) > switch-to-buffer(#) > ediff-setup-windows-multiframe-compare(# # b.java> nil #) > ediff-setup-windows-multiframe(# # nil > #) > ediff-setup-windows-default(# # nil > #) > ediff-setup-windows(# # nil # *Ediff Control Panel*>) > ediff-setup(# "/:/tmp/a.java" # > "/:/tmp/b.java" nil nil nil ((ediff-job-name . ediff-files)) nil) > ediff-files-internal("/:/tmp/a.java" "/:/tmp/b.java" nil nil > ediff-files) > ediff("/:/tmp/a.java" "/:/tmp/b.java") > (progn (add-hook (quote prog-mode-hook) (quote flymake-mode)) (ediff > "/:/tmp/a.java" "/:/tmp/b.java")) > eval((progn (add-hook (quote prog-mode-hook) (quote flymake-mode)) > (ediff "/:/tmp/a.java" "/:/tmp/b.java"))) > command-line-1(("-f" "toggle-debug-on-quit" "-eval" "(progn > (add-hook (quote prog-mode-hook) (quote flymake-mode)) (ediff > \"/:/tmp/a.java\" \"/:/tmp/b.java\"))")) > command-line() > normal-top-level() The following patch fixes this problem: