Subject: Re: bug#5705: 23.1.93; recursive load error when loading tramp

From: Chong Yidong <[email-masked]>
Date: Thu, 11 Mar 2010 12:36:23 -0500

Paul Pogonyshev <[email-masked]> writes:

> Sorry, I tried now with 'emacs -Q' and found a corrected way:
>
>     M-x ido-mode RET           enable ido
>     C-x C-f / /                this makes ido load tramp
>     C-g                        abort loading
>
> You need to be quick to hit C-g while tramp is still loading.  After
> this file opening stops working just as described, at least here.

OK, I see the problem.

If you C-g while Tramp is loading, it leaves Tramp in a half-loaded
state, which screws up all subsequent calls to tramp-tramp-file-p (Lisp
backtrace below).  The eval-after-load in tramp.el seems to be the
culprit.

Michael, could you take a look?

Debugger entered--Lisp error: (error "Recursive load" "/home/cyd/emacs/lisp/net/tramp.elc" "/home/cyd/emacs/lisp/net/tramp-cmds.elc" "/home/cyd/emacs/lisp/net/tramp.elc" "/home/cyd/emacs/lisp/net/tramp-cmds.elc" "/home/cyd/emacs/lisp/net/tramp.elc" "/home/cyd/emacs/lisp/net/tramp-cmds.elc" "/home/cyd/emacs/lisp/net/tramp.elc" "/home/cyd/emacs/lisp/net/tramp-cmds.elc" "/home/cyd/emacs/lisp/net/tramp.elc")
  require(tramp)
  require(tramp-cmds)
  (catch (quote tramp-loading) (require feature) (add-hook (quote tramp-unload-hook) (\` ...)))
  (progn (catch (quote tramp-loading) (require feature) (add-hook ... ...)) (unless (featurep feature) (message "Loading %s failed, ignoring this package" feature)))
  (if feature (progn (catch ... ... ...) (unless ... ...)))
  (when feature (catch (quote tramp-loading) (require feature) (add-hook ... ...)) (unless (featurep feature) (message "Loading %s failed, ignoring this package" feature)))
  (while --dolist-tail-- (setq feature (car --dolist-tail--)) (when feature (catch ... ... ...) (unless ... ...)) (setq --dolist-tail-- (cdr --dolist-tail--)))
  (let ((--dolist-tail-- ...) feature) (while --dolist-tail-- (setq feature ...) (when feature ... ...) (setq --dolist-tail-- ...)))
  (dolist (feature (list ... ... ... ... ... ... ...)) (when feature (catch ... ... ...) (unless ... ...)))
  eval((dolist (feature (list ... ... ... ... ... ... ...)) (when feature (catch ... ... ...) (unless ... ...))))
  eval-after-load("tramp" (dolist (feature (list ... ... ... ... ... ... ...)) (when feature (catch ... ... ...) (unless ... ...))))
  byte-code("\300\301\302\"\210\303\304\305\"\210\306\307\310\"\210\311\312\313\314\315\316\317\320&\207" [add-hook tramp-unload-hook #[nil "\300\301!\205\n\302\301\303\"\207" [featurep tramp-uu unload-feature force] 3] autoload uudecode-decode-region "uudecode" eval-after-load "tramp" (dolist (feature ...) (when feature ... ...)) custom-declare-group tramp nil "Edit remote files with a combination of rsh and rcp or similar programs." :group files :version "22.1"] 8)
  require(tramp)
  require(tramp-cmds)
  (catch (quote tramp-loading) (require feature) (add-hook (quote tramp-unload-hook) (\` ...)))
  (progn (catch (quote tramp-loading) (require feature) (add-hook ... ...)) (unless (featurep feature) (message "Loading %s failed, ignoring this package" feature)))
  (if feature (progn (catch ... ... ...) (unless ... ...)))
  (when feature (catch (quote tramp-loading) (require feature) (add-hook ... ...)) (unless (featurep feature) (message "Loading %s failed, ignoring this package" feature)))
  (while --dolist-tail-- (setq feature (car --dolist-tail--)) (when feature (catch ... ... ...) (unless ... ...)) (setq --dolist-tail-- (cdr --dolist-tail--)))
  (let ((--dolist-tail-- ...) feature) (while --dolist-tail-- (setq feature ...) (when feature ... ...) (setq --dolist-tail-- ...)))
  (dolist (feature (list ... ... ... ... ... ... ...)) (when feature (catch ... ... ...) (unless ... ...)))
  eval((dolist (feature (list ... ... ... ... ... ... ...)) (when feature (catch ... ... ...) (unless ... ...))))
  eval-after-load("tramp" (dolist (feature (list ... ... ... ... ... ... ...)) (when feature (catch ... ... ...) (unless ... ...))))
  byte-code("\300\301\302\"\210\303\304\305\"\210\306\307\310\"\210\311\312\313\314\315\316\317\320&\207" [add-hook tramp-unload-hook #[nil "\300\301!\205\n\302\301\303\"\207" [featurep tramp-uu unload-feature force] 3] autoload uudecode-decode-region "uudecode" eval-after-load "tramp" (dolist (feature ...) (when feature ... ...)) custom-declare-group tramp nil "Edit remote files with a combination of rsh and rcp or similar programs." :group files :version "22.1"] 8)
  require(tramp)
  require(tramp-cmds)
  (catch (quote tramp-loading) (require feature) (add-hook (quote tramp-unload-hook) (\` ...)))
  (progn (catch (quote tramp-loading) (require feature) (add-hook ... ...)) (unless (featurep feature) (message "Loading %s failed, ignoring this package" feature)))
  (if feature (progn (catch ... ... ...) (unless ... ...)))
  (when feature (catch (quote tramp-loading) (require feature) (add-hook ... ...)) (unless (featurep feature) (message "Loading %s failed, ignoring this package" feature)))
  (while --dolist-tail-- (setq feature (car --dolist-tail--)) (when feature (catch ... ... ...) (unless ... ...)) (setq --dolist-tail-- (cdr --dolist-tail--)))
  (let ((--dolist-tail-- ...) feature) (while --dolist-tail-- (setq feature ...) (when feature ... ...) (setq --dolist-tail-- ...)))
  (dolist (feature (list ... ... ... ... ... ... ...)) (when feature (catch ... ... ...) (unless ... ...)))
  eval((dolist (feature (list ... ... ... ... ... ... ...)) (when feature (catch ... ... ...) (unless ... ...))))
  eval-after-load("tramp" (dolist (feature (list ... ... ... ... ... ... ...)) (when feature (catch ... ... ...) (unless ... ...))))
  byte-code("\300\301\302\"\210\303\304\305\"\210\306\307\310\"\210\311\312\313\314\315\316\317\320&\207" [add-hook tramp-unload-hook #[nil "\300\301!\205\n\302\301\303\"\207" [featurep tramp-uu unload-feature force] 3] autoload uudecode-decode-region "uudecode" eval-after-load "tramp" (dolist (feature ...) (when feature ... ...)) custom-declare-group tramp nil "Edit remote files with a combination of rsh and rcp or similar programs." :group files :version "22.1"] 8)
  require(tramp)
  require(tramp-cmds)
  (catch (quote tramp-loading) (require feature) (add-hook (quote tramp-unload-hook) (\` ...)))
  (progn (catch (quote tramp-loading) (require feature) (add-hook ... ...)) (unless (featurep feature) (message "Loading %s failed, ignoring this package" feature)))
  (if feature (progn (catch ... ... ...) (unless ... ...)))
  (when feature (catch (quote tramp-loading) (require feature) (add-hook ... ...)) (unless (featurep feature) (message "Loading %s failed, ignoring this package" feature)))
  (while --dolist-tail-- (setq feature (car --dolist-tail--)) (when feature (catch ... ... ...) (unless ... ...)) (setq --dolist-tail-- (cdr --dolist-tail--)))
  (let ((--dolist-tail-- ...) feature) (while --dolist-tail-- (setq feature ...) (when feature ... ...) (setq --dolist-tail-- ...)))
  (dolist (feature (list ... ... ... ... ... ... ...)) (when feature (catch ... ... ...) (unless ... ...)))
  eval((dolist (feature (list ... ... ... ... ... ... ...)) (when feature (catch ... ... ...) (unless ... ...))))
  eval-after-load("tramp" (dolist (feature (list ... ... ... ... ... ... ...)) (when feature (catch ... ... ...) (unless ... ...))))
  byte-code("\300\301\302\"\210\303\304\305\"\210\306\307\310\"\210\311\312\313\314\315\316\317\320&^G\207" [add-hook tramp-unload-hook #[nil "\300\301!\205\n\302\301\303\"\207" [featurep tramp-uu unload-feature force] 3] autoload uudecode-decode-region "uudecode" eval-after-load "tramp" (dolist (feature ...) (when feature ... ...)) custom-declare-group tramp nil "Edit remote files with a combination of rsh and rcp or similar programs." :group files :version "22.1"] 8)
  tramp-tramp-file-p("/home/cyd/emacs/admin/ChangeLog")
  tramp-find-foreign-file-name-handler("/home/cyd/emacs/admin/ChangeLog")
  tramp-set-auto-save()
  run-hooks(find-file-hook)
  after-find-file(nil t)
  find-file-noselect-1(#<buffer ChangeLog> "~/emacs/admin/ChangeLog" nil nil "~/src/emacs/emacs-23/admin/ChangeLog" (3499012 2054))
  find-file-noselect("/home/cyd/emacs/admin/ChangeLog" nil nil)
  ido-file-internal(raise-frame)
  ido-find-file()
  call-interactively(ido-find-file nil nil)