summaryrefslogtreecommitdiff
path: root/lisp/net
diff options
context:
space:
mode:
authorMichael Albinus <michael.albinus@gmx.de>2012-06-17 20:54:39 +0200
committerMichael Albinus <michael.albinus@gmx.de>2012-06-17 20:54:39 +0200
commit298551496fd9011dc68f8a463a69820573a3abd2 (patch)
treefcebb8d4c5785af2eaf4ceb0304c59a66c4b504a /lisp/net
parentddfbf826bcd838b46e1e0ac577b76853267c060a (diff)
downloademacs-298551496fd9011dc68f8a463a69820573a3abd2.tar.gz
emacs-298551496fd9011dc68f8a463a69820573a3abd2.tar.bz2
emacs-298551496fd9011dc68f8a463a69820573a3abd2.zip
* minibuffer.el (read-file-name-default): Bind `non-essential' to `t'.
* net/tramp.el (tramp-file-name-handler): Catch 'non-essential. * net/ange-ftp.el (ange-ftp-gwp-start, ange-ftp-start-process): * net/tramp-sh.el (tramp-maybe-open-connection): Throw if `non-essential' is non-nil.
Diffstat (limited to 'lisp/net')
-rw-r--r--lisp/net/ange-ftp.el8
-rw-r--r--lisp/net/tramp-sh.el5
-rw-r--r--lisp/net/tramp.el32
3 files changed, 34 insertions, 11 deletions
diff --git a/lisp/net/ange-ftp.el b/lisp/net/ange-ftp.el
index 447549f58cd..4ca40fdabef 100644
--- a/lisp/net/ange-ftp.el
+++ b/lisp/net/ange-ftp.el
@@ -1774,6 +1774,10 @@ good, skip, fatal, or unknown."
(defun ange-ftp-gwp-start (host user name args)
"Login to the gateway machine and fire up an FTP process."
+ ;; If `non-essential' is non-nil, don't reopen a new connection. It
+ ;; will be catched in Tramp.
+ (when non-essential
+ (throw 'non-essential 'non-essential))
(let (;; It would be nice to make process-connection-type nil,
;; but that doesn't work: ftp never responds.
;; Can anyone find a fix for that?
@@ -1905,6 +1909,10 @@ been queued with no result. CONT will still be called, however."
"Spawn a new FTP process ready to connect to machine HOST and give it NAME.
If HOST is only FTP-able through a gateway machine then spawn a shell
on the gateway machine to do the FTP instead."
+ ;; If `non-essential' is non-nil, don't reopen a new connection. It
+ ;; will be catched in Tramp.
+ (when non-essential
+ (throw 'non-essential 'non-essential))
(let* ((use-gateway (ange-ftp-use-gateway-p host))
(use-smart-ftp (and (not ange-ftp-gateway-host)
(ange-ftp-use-smart-gateway-p host)))
diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el
index 47aaa4a8e57..1ef602cf6da 100644
--- a/lisp/net/tramp-sh.el
+++ b/lisp/net/tramp-sh.el
@@ -4292,6 +4292,11 @@ connection if a previous connection has died for some reason."
;; We call `tramp-get-buffer' in order to get a debug
;; buffer for messages from the beginning.
(tramp-get-buffer vec)
+
+ ;; If `non-essential' is non-nil, don't reopen a new connection.
+ (when non-essential
+ (throw 'non-essential 'non-essential))
+
(tramp-with-progress-reporter
vec 3
(if (zerop (length (tramp-file-name-user vec)))
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index e9621c5d44e..d0e8b35d6ca 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -1928,22 +1928,32 @@ Falls back to normal file name handler if no Tramp file name handler exists."
(let ((default-directory
(tramp-compat-temporary-file-directory)))
(load (cadr sf) 'noerror 'nomessage)))
+ ;; If `non-essential' is non-nil, Tramp shall
+ ;; not open a new connection.
;; If Tramp detects that it shouldn't continue
- ;; to work, it throws the `suppress' event. We
- ;; try the default handler then.
+ ;; to work, it throws the `suppress' event.
;; This could happen for example, when Tramp
;; tries to open the same connection twice in a
;; short time frame.
+ ;; In both cases, we try the default handler then.
(setq result
- (catch 'suppress (apply foreign operation args)))
- (if (eq result 'suppress)
- (let (tramp-message-show-message)
- (tramp-message
- v 1 "Suppress received in operation %s"
- (append (list operation) args))
- (tramp-cleanup v)
- (tramp-run-real-handler operation args))
- result))
+ (catch 'non-essential
+ (catch 'suppress
+ (apply foreign operation args))))
+ (cond
+ ((eq result 'non-essential)
+ (tramp-message
+ v 5 "Non-essential received in operation %s"
+ (append (list operation) args))
+ (tramp-run-real-handler operation args))
+ ((eq result 'suppress)
+ (let (tramp-message-show-message)
+ (tramp-message
+ v 1 "Suppress received in operation %s"
+ (append (list operation) args))
+ (tramp-cleanup v)
+ (tramp-run-real-handler operation args)))
+ (t result)))
;; Trace that somebody has interrupted the operation.
((debug quit)