Subject: Tramp freezes up if you interrupt sudo's prompt

From: Stefan Monnier <[email-masked]>
Date: Thu, 01 Dec 2011 14:52:26 -0500

Package: Emacs
Version: 24.0.91

   % emacs -Q
   C-x C-f /sudo::./ TAB
   at the prompt hit C-g

this freezes Emacs (C-g doesn't help any further).
If I send the SIGUSR2 to wake it up, I get the appended backtrace.

        Stefan

Debugger entered--Lisp error: (quit)
  accept-process-output(#<process *tramp/sudo root@ceviche*> 1 nil)
  byte-code(<BYTECODE> [timeout -with-timeout-timer- with-timeout-timers proc timeout-msecs run-with-timer 1 nil #[nil "\300\301\211\"\207" [throw timeout] 3] ((cancel-timer -with-timeout-timer-)) accept-process-output] 5)
  tramp-accept-process-output(#<process *tramp/sudo root@ceviche*> 1)
  tramp-wait-for-regexp(#<process *tramp/sudo root@ceviche*> nil "\\(^\\|\\)[^#$\n]*///5fe2bbf32410c0285dcbdf73105d3075#\\$?$")
  tramp-wait-for-output(#<process *tramp/sudo root@ceviche*>)
  tramp-send-command(["sudo" "root" "ceviche" "./"] "cd ~root; pwd")
  tramp-sh-handle-expand-file-name("/sudo::./" nil)
  apply(tramp-sh-handle-expand-file-name ("/sudo::./" nil))
  tramp-sh-file-name-handler(expand-file-name "/sudo::./" nil)
  apply(tramp-sh-file-name-handler expand-file-name ("/sudo::./" nil))
  byte-code(<BYTECODE> [foreign sf d default-directory x operation autoload boundp temporary-file-directory fboundp temp-directory subrp functionp getenv "TEMP" file-directory-p file-name-as-directory "TMP" "TMPDIR" file-exists-p "c:/temp" message "Neither `temporary-file-directory' nor `temp-directory' is defined -- using /tmp." "/tmp" load noerror nomessage apply args] 5)
  tramp-file-name-handler(expand-file-name "/sudo::./" nil)
  expand-file-name("/sudo::./")
  tramp-handle-file-remote-p("/sudo::./" nil nil)
  apply(tramp-handle-file-remote-p ("/sudo::./" nil nil))
  tramp-sh-file-name-handler(file-remote-p "/sudo::./" nil nil)
  apply(tramp-sh-file-name-handler file-remote-p ("/sudo::./" nil nil))
  byte-code(<BYTECODE> [foreign sf d default-directory x operation autoload boundp temporary-file-directory fboundp temp-directory subrp functionp getenv "TEMP" file-directory-p file-name-as-directory "TMP" "TMPDIR" file-exists-p "c:/temp" message "Neither `temporary-file-directory' nor `temp-directory' is defined -- using /tmp." "/tmp" load noerror nomessage apply args] 5)
  tramp-file-name-handler(file-remote-p "/sudo::./" nil nil)
  file-remote-p("/sudo::./")
  byte-code(<BYTECODE> [end tramp-rfn-eshadow-update-overlay-regexp tramp-rfn-eshadow-overlay file-name-handler-alist rfn-eshadow-update-overlay-hook rfn-eshadow-overlay subrp overlay-end functionp minibuffer-prompt-end file-remote-p buffer-substring-no-properties string-match buffer-string nil move-overlay rfn-eshadow-update-overlay] 4)
  tramp-rfn-eshadow-update-overlay()
  run-hooks(rfn-eshadow-update-overlay-hook)
  byte-code(<BYTECODE> [rfn-eshadow-overlay non-essential end start mid goal substitute-in-file-name minibuffer-contents overlay-end minibuffer-prompt-end t nil (byte-code "\301\302d\"!\207" [pos substitute-in-file-name buffer-substring-no-properties] 4) ((error)) 2 move-overlay run-hooks rfn-eshadow-update-overlay-hook pos] 6)
  rfn-eshadow-update-overlay()
  read-from-minibuffer("Find file: " "~/src/emacs/trunk/" (keymap (keymap (32)) keymap (10 . minibuffer-complete-and-exit) (13 . minibuffer-complete-and-exit) keymap (menu-bar keymap (minibuf "Minibuf" keymap (tab menu-item "Complete" minibuffer-complete :help "Complete as far as possible") (space menu-item "Complete Word" minibuffer-complete-word :help "Complete at most one word") (63 menu-item "List Completions" minibuffer-completion-help :help "Display all possible completions") "Minibuf")) (27 keymap (118 . switch-to-completions)) (prior . switch-to-completions) (63 . minibuffer-completion-help) (32 . minibuffer-complete-word) (9 . minibuffer-complete) keymap (menu-bar keymap (minibuf "Minibuf" keymap (previous menu-item "Previous History Item" previous-history-element :help "Put previous minibuffer history element in the minibuffer") (next menu-item "Next History Item" next-history-element :help "Put next minibuffer history element in the minibuffer") (isearch-backward menu-item "Isearch History Backward" isearch-backward :help "Incrementally search minibuffer history backward") (isearch-forward menu-item "Isearch History Forward" isearch-forward :help "Incrementally search minibuffer history forward") (return menu-item "Enter" exit-minibuffer :key-sequence "" :help "Terminate input and exit minibuffer") (quit menu-item "Quit" abort-recursive-edit :help "Abort input and exit minibuffer") "Minibuf")) (10 . exit-minibuffer) (13 . exit-minibuffer) (7 . abort-recursive-edit) (C-tab . file-cache-minibuffer-complete) (9 . self-insert-command) (up . previous-history-element) (prior . previous-history-element) (down . next-history-element) (next . next-history-element) (27 keymap (114 . previous-matching-history-element) (115 . next-matching-history-element) (112 . previous-history-element) (110 . next-history-element))) nil file-name-history "~/src/emacs/trunk/" nil)
  completing-read-default("Find file: " read-file-name-internal file-exists-p confirm-after-completion "~/src/emacs/trunk/" file-name-history "~/src/emacs/trunk/" nil)
  completing-read("Find file: " read-file-name-internal file-exists-p confirm-after-completion "~/src/emacs/trunk/" file-name-history "~/src/emacs/trunk/")
  read-file-name-default("Find file: " nil "~/src/emacs/trunk/" confirm-after-completion nil nil)
  read-file-name("Find file: " nil "~/src/emacs/trunk/" confirm-after-completion)
  find-file-read-args("Find file: " confirm-after-completion)
  byte-code("\300\301\302 \"\207" [find-file-read-args "Find file: " confirm-nonexistent-file-or-buffer] 3)
  call-interactively(find-file nil nil)

        Stefan