Skip to content

Buffer stuck in infinite loop after file changed by external program #2

Description

@Simon-Lin

This happens when editing tex files in a shared folder, after others have changed the tex file. Emacs is stuck in an endless loop and keep prompting if the user wants to save the current buffer. However, answering the prompt does not get one out of the loop, and eventually emacs freezes and has to be killed or outright crashes.

System information:
MacOS 26.4 Tahoe/ Emacs 30.2

To reproduce:

  1. start Emacs via emacs -Q
  2. load auctex and procress
  3. create a .tex file (say main.tex)
  4. edit main.tex in another program.
  5. Emacs now gets trapped in a loop

Here's a backtrace of the stack when the error happens. I've lowered max-lisp-eval-depth to catch the error message.

Debugger entered--Lisp error: (excessive-lisp-nesting 101)
  TeX-in-comment()
  (not (TeX-in-comment))
  (if (not (TeX-in-comment)) (setq answer (nth 1 (car entry))))
  (if (re-search-forward (nth 2 (car entry)) 10000 t) (if (not (TeX-in-comment)) (setq answer (nth 1 (car entry)))) (setq entry (cdr entry)))
  (while (and entry (not answer)) (if (re-search-forward (nth 2 (car entry)) 10000 t) (if (not (TeX-in-comment)) (setq answer (nth 1 (car entry)))) (setq entry (cdr entry))))
  (let ((comment-start-skip (concat "\\(\\(^\\|[^\\\n]\\)\\(" (regexp-quote TeX-esc) (regexp-quote TeX-esc) "\\)*\\)\\(%+ *\\)")) (entry TeX-format-list) answer case-fold-search) (while (and entry (not answer)) (if (re-search-forward (nth 2 (car entry)) 10000 t) (if (not (TeX-in-comment)) (setq answer (nth 1 (car entry)))) (setq entry (cdr entry)))) (if answer answer TeX-default-mode))
  (save-excursion (goto-char (point-min)) (let ((comment-start-skip (concat "\\(\\(^\\|[^\\\n]\\)\\(" (regexp-quote TeX-esc) (regexp-quote TeX-esc) "\\)*\\)\\(%+ *\\)")) (entry TeX-format-list) answer case-fold-search) (while (and entry (not answer)) (if (re-search-forward (nth 2 (car entry)) 10000 t) (if (not (TeX-in-comment)) (setq answer (nth 1 (car entry)))) (setq entry (cdr entry)))) (if answer answer TeX-default-mode)))
  (if (or (equal (buffer-size) 0) TeX-force-default-mode) TeX-default-mode (save-excursion (goto-char (point-min)) (let ((comment-start-skip (concat "\\(\\(^\\|[^\\\n]\\)\\(" (regexp-quote TeX-esc) (regexp-quote TeX-esc) "\\)*\\)\\(%+ *\\)")) (entry TeX-format-list) answer case-fold-search) (while (and entry (not answer)) (if (re-search-forward (nth 2 (car entry)) 10000 t) (if (not (TeX-in-comment)) (setq answer (nth 1 ...))) (setq entry (cdr entry)))) (if answer answer TeX-default-mode))))
  (funcall (if (or (equal (buffer-size) 0) TeX-force-default-mode) TeX-default-mode (save-excursion (goto-char (point-min)) (let ((comment-start-skip (concat "\\(\\(^\\|[^\\\n]\\)\\(" (regexp-quote TeX-esc) (regexp-quote TeX-esc) "\\)*\\)\\(%+ *\\)")) (entry TeX-format-list) answer case-fold-search) (while (and entry (not answer)) (if (re-search-forward (nth 2 ...) 10000 t) (if (not ...) (setq answer ...)) (setq entry (cdr entry)))) (if answer answer TeX-default-mode)))))
  TeX-tex-mode()
  set-auto-mode-0(tex-mode nil)
  set-auto-mode--apply-alist((("\\.hva\\'" . LaTeX-mode) ("\\.gpg\\(~\\|\\.~[0-9]+~\\)?\\'" nil epa-file) ("\\.elc\\'" . elisp-byte-code-mode) ("\\.\\(?:3fr\\|arw\\|bmp\\|cr[2w]\\|d\\(?:c[mr]\\|ds\\|ng\\)\\|exr\\|gif\\|ico\\|jp\\(?:2\\|eg\\)\\|mrw\\|nef\\|orf\\|p\\(?:bm\\|ef\\|ict\\|ng\\|sd\\)\\|raf\\|s\\(?:gi\\|r[2f]\\|vg\\)\\|t\\(?:ga\\|iff\\)\\)\\'" . image-mode) ("\\.zst\\'" nil jka-compr) ("\\.dz\\'" nil jka-compr) ("\\.xz\\'" nil jka-compr) ("\\.lzma\\'" nil jka-compr) ("\\.lz\\'" nil jka-compr) ("\\.g?z\\'" nil jka-compr) ("\\.bz2\\'" nil jka-compr) ("\\.Z\\'" nil jka-compr) ("\\.vr[hi]?\\'" . vera-mode) ("\\(?:\\.\\(?:rbw?\\|ru\\|rake\\|thor\\|axlsx\\|jbuilder\\|rabl\\|gemspec\\|podspec\\)\\|/\\(?:Gem\\|Rake\\|Cap\\|Thor\\|Puppet\\|Berks\\|Brew\\|Fast\\|Vagrant\\|Guard\\|Pod\\)file\\)\\'" . ruby-mode) ("\\.re?st\\'" . rst-mode) ("/\\(?:Pipfile\\|\\.?flake8\\)\\'" . conf-mode) ("\\.py[iw]?\\'" . python-mode) ("\\.m\\'" . octave-maybe-mode) ("\\.less\\'" . less-css-mode) ("\\.editorconfig\\'" . editorconfig-conf-mode) ("\\.scss\\'" . scss-mode) ("\\.cs\\'" . csharp-mode) ("\\.awk\\'" . awk-mode) ("\\.\\(u?lpc\\|pike\\|pmod\\(\\.in\\)?\\)\\'" . pike-mode) ("\\.idl\\'" . idl-mode) ("\\.java\\'" . java-mode) ("\\.m\\'" . objc-mode) ("\\.ii\\'" . c++-mode) ("\\.i\\'" . c-mode) ("\\.lex\\'" . c-mode) ("\\.y\\(acc\\)?\\'" . c-mode) ("\\.h\\'" . c-or-c++-mode) ("\\.c\\'" . c-mode) ("\\.\\(CC?\\|HH?\\)\\'" . c++-mode) ("\\.[ch]\\(pp\\|xx\\|\\+\\+\\)\\'" . c++-mode) ("\\.\\(cc\\|hh\\)\\'" . c++-mode) ("\\.\\(bat\\|cmd\\)\\'" . bat-mode) ("\\.[sx]?html?\\(\\.[a-zA-Z_]+\\)?\\'" . mhtml-mode) ("\\.svgz?\\'" . image-mode) ("\\.svgz?\\'" . xml-mode) ("\\.x[bp]m\\'" . image-mode) ("\\.x[bp]m\\'" . c-mode) ("\\.p[bpgn]m\\'" . image-mode) ("\\.tiff?\\'" . image-mode) ("\\.gif\\'" . image-mode) ("\\.png\\'" . image-mode) ("\\.jpe?g\\'" . image-mode) ("\\.webp\\'" . image-mode) ("\\.te?xt\\'" . text-mode) ("\\.[tT]e[xX]\\'" . tex-mode) ...) nil nil)
  set-auto-mode()
  normal-mode(t)
  after-find-file(nil nil t nil nil)
  revert-buffer--default(t t)
  revert-buffer(t t)
  find-file-noselect("main.tex")
  (set-buffer (find-file-noselect (TeX-master-file TeX-default-extension)))
  (save-current-buffer (set-buffer (find-file-noselect (TeX-master-file TeX-default-extension))) (procress-modeline-string))
  (with-current-buffer (find-file-noselect (TeX-master-file TeX-default-extension)) (procress-modeline-string))
  (list (with-current-buffer (find-file-noselect (TeX-master-file TeX-default-extension)) (procress-modeline-string)))
  eval((list (with-current-buffer (find-file-noselect (TeX-master-file TeX-default-extension)) (procress-modeline-string))) t)
  redisplay_internal\ \(C\ function\)()
  yes-or-no-p("File main.tex changed on disk.  Reread from disk? ")
  find-file-noselect("main.tex")
  (set-buffer (find-file-noselect (TeX-master-file TeX-default-extension)))
  (save-current-buffer (set-buffer (find-file-noselect (TeX-master-file TeX-default-extension))) (procress-modeline-string))
  (with-current-buffer (find-file-noselect (TeX-master-file TeX-default-extension)) (procress-modeline-string))
  (list (with-current-buffer (find-file-noselect (TeX-master-file TeX-default-extension)) (procress-modeline-string)))
  eval((list (with-current-buffer (find-file-noselect (TeX-master-file TeX-default-extension)) (procress-modeline-string))) t)
  redisplay_internal\ \(C\ function\)()
  yes-or-no-p("File main.tex changed on disk.  Reread from disk? ")
  find-file-noselect("main.tex")
  (set-buffer (find-file-noselect (TeX-master-file TeX-default-extension)))
  (save-current-buffer (set-buffer (find-file-noselect (TeX-master-file TeX-default-extension))) (procress-modeline-string))
  (with-current-buffer (find-file-noselect (TeX-master-file TeX-default-extension)) (procress-modeline-string))
  (list (with-current-buffer (find-file-noselect (TeX-master-file TeX-default-extension)) (procress-modeline-string)))
  eval((list (with-current-buffer (find-file-noselect (TeX-master-file TeX-default-extension)) (procress-modeline-string))) t)
  redisplay_internal\ \(C\ function\)()
  yes-or-no-p("File main.tex changed on disk.  Reread from disk? ")
  find-file-noselect("main.tex")
  (set-buffer (find-file-noselect (TeX-master-file TeX-default-extension)))
  (save-current-buffer (set-buffer (find-file-noselect (TeX-master-file TeX-default-extension))) (procress-modeline-string))
  (with-current-buffer (find-file-noselect (TeX-master-file TeX-default-extension)) (procress-modeline-string))
  (list (with-current-buffer (find-file-noselect (TeX-master-file TeX-default-extension)) (procress-modeline-string)))
  eval((list (with-current-buffer (find-file-noselect (TeX-master-file TeX-default-extension)) (procress-modeline-string))) t)
  redisplay_internal\ \(C\ function\)()
  yes-or-no-p("File main.tex changed on disk.  Reread from disk? ")
  find-file-noselect("main.tex")
  (set-buffer (find-file-noselect (TeX-master-file TeX-default-extension)))
  (save-current-buffer (set-buffer (find-file-noselect (TeX-master-file TeX-default-extension))) (procress-modeline-string))
  (with-current-buffer (find-file-noselect (TeX-master-file TeX-default-extension)) (procress-modeline-string))
  (list (with-current-buffer (find-file-noselect (TeX-master-file TeX-default-extension)) (procress-modeline-string)))
  eval((list (with-current-buffer (find-file-noselect (TeX-master-file TeX-default-extension)) (procress-modeline-string))) t)
  redisplay_internal\ \(C\ function\)()
  yes-or-no-p("File main.tex changed on disk.  Reread from disk? ")
  find-file-noselect("main.tex")
  (set-buffer (find-file-noselect (TeX-master-file TeX-default-extension)))
  (save-current-buffer (set-buffer (find-file-noselect (TeX-master-file TeX-default-extension))) (procress-modeline-string))
  (with-current-buffer (find-file-noselect (TeX-master-file TeX-default-extension)) (procress-modeline-string))
  (list (with-current-buffer (find-file-noselect (TeX-master-file TeX-default-extension)) (procress-modeline-string)))
  eval((list (with-current-buffer (find-file-noselect (TeX-master-file TeX-default-extension)) (procress-modeline-string))) t)
  redisplay_internal\ \(C\ function\)()
  yes-or-no-p("File main.tex changed on disk.  Reread from disk? ")
  find-file-noselect("main.tex")
  (set-buffer (find-file-noselect (TeX-master-file TeX-default-extension)))
  (save-current-buffer (set-buffer (find-file-noselect (TeX-master-file TeX-default-extension))) (procress-modeline-string))
  (with-current-buffer (find-file-noselect (TeX-master-file TeX-default-extension)) (procress-modeline-string))
  (list (with-current-buffer (find-file-noselect (TeX-master-file TeX-default-extension)) (procress-modeline-string)))
  eval((list (with-current-buffer (find-file-noselect (TeX-master-file TeX-default-extension)) (procress-modeline-string))) t)
  redisplay_internal\ \(C\ function\)()
  yes-or-no-p("File main.tex changed on disk.  Reread from disk? ")
  find-file-noselect("main.tex")
  (set-buffer (find-file-noselect (TeX-master-file TeX-default-extension)))
  (save-current-buffer (set-buffer (find-file-noselect (TeX-master-file TeX-default-extension))) (procress-modeline-string))
  (with-current-buffer (find-file-noselect (TeX-master-file TeX-default-extension)) (procress-modeline-string))
  (list (with-current-buffer (find-file-noselect (TeX-master-file TeX-default-extension)) (procress-modeline-string)))
  eval((list (with-current-buffer (find-file-noselect (TeX-master-file TeX-default-extension)) (procress-modeline-string))) t)
  redisplay_internal\ \(C\ function\)()
  yes-or-no-p("File main.tex changed on disk.  Reread from disk? ")
  find-file-noselect("main.tex")
  (set-buffer (find-file-noselect (TeX-master-file TeX-default-extension)))
  (save-current-buffer (set-buffer (find-file-noselect (TeX-master-file TeX-default-extension))) (procress-modeline-string))
  (with-current-buffer (find-file-noselect (TeX-master-file TeX-default-extension)) (procress-modeline-string))
  (list (with-current-buffer (find-file-noselect (TeX-master-file TeX-default-extension)) (procress-modeline-string)))
  eval((list (with-current-buffer (find-file-noselect (TeX-master-file TeX-default-extension)) (procress-modeline-string))) t)
  redisplay_internal\ \(C\ function\)()
  yes-or-no-p("File main.tex changed on disk.  Reread from disk? ")
  find-file-noselect("main.tex")
  (set-buffer (find-file-noselect (TeX-master-file TeX-default-extension)))
  (save-current-buffer (set-buffer (find-file-noselect (TeX-master-file TeX-default-extension))) (procress-modeline-string))
  (with-current-buffer (find-file-noselect (TeX-master-file TeX-default-extension)) (procress-modeline-string))
  (list (with-current-buffer (find-file-noselect (TeX-master-file TeX-default-extension)) (procress-modeline-string)))
  eval((list (with-current-buffer (find-file-noselect (TeX-master-file TeX-default-extension)) (procress-modeline-string))) t)
  redisplay_internal\ \(C\ function\)()
  yes-or-no-p("File main.tex changed on disk.  Reread from disk? ")
  find-file-noselect("main.tex")
  (set-buffer (find-file-noselect (TeX-master-file TeX-default-extension)))
  (save-current-buffer (set-buffer (find-file-noselect (TeX-master-file TeX-default-extension))) (procress-modeline-string))
  (with-current-buffer (find-file-noselect (TeX-master-file TeX-default-extension)) (procress-modeline-string))
  (list (with-current-buffer (find-file-noselect (TeX-master-file TeX-default-extension)) (procress-modeline-string)))
  eval((list (with-current-buffer (find-file-noselect (TeX-master-file TeX-default-extension)) (procress-modeline-string))) t)
  redisplay_internal\ \(C\ function\)()
  yes-or-no-p("File main.tex changed on disk.  Reread from disk? ")
  find-file-noselect("main.tex")
  (set-buffer (find-file-noselect (TeX-master-file TeX-default-extension)))
  (save-current-buffer (set-buffer (find-file-noselect (TeX-master-file TeX-default-extension))) (procress-modeline-string))
  (with-current-buffer (find-file-noselect (TeX-master-file TeX-default-extension)) (procress-modeline-string))
  (list (with-current-buffer (find-file-noselect (TeX-master-file TeX-default-extension)) (procress-modeline-string)))
  eval((list (with-current-buffer (find-file-noselect (TeX-master-file TeX-default-extension)) (procress-modeline-string))) t)
  redisplay_internal\ \(C\ function\)()

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions