From 3e8f9482fe2288baedd9cc5026e25ffc543683ab Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Tue, 2 Apr 2019 15:17:17 +0200 Subject: [PATCH] Suppress timers in tramp-send-string * lisp/net/tramp.el (tramp-send-string): Suppress timers. Use `with-local-quit'. --- lisp/net/tramp.el | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index 5b50d39a0d4..7206d8eb8a6 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -3881,7 +3881,7 @@ of." (tramp-check-for-regexp proc tramp-password-prompt-regexp) (tramp-message vec 3 "Sending %s" (match-string 1)) ;; We don't call `tramp-send-string' in order to hide the - ;; password from the debug buffer. + ;; password from the debug buffer and the traces. (process-send-string proc (concat (tramp-read-passwd proc) tramp-local-end-of-line)) ;; Hide password prompt. @@ -4171,12 +4171,20 @@ The STRING is expected to use Unix line-endings, but the lines sent to the remote host use line-endings as defined in the variable `tramp-rsh-end-of-line'. The communication buffer is erased before sending." (let* ((p (tramp-get-connection-process vec)) - (chunksize (tramp-get-connection-property p "chunksize" nil))) + (chunksize (tramp-get-connection-property p "chunksize" nil)) + ;; We do not want to run timers. + (tl timer-list) + (stimers (with-timeout-suspend)) + timer-list timer-idle-list) (unless p (tramp-error vec 'file-error "Can't send string to remote host -- not logged in")) (tramp-set-connection-property p "last-cmd-time" (current-time)) (tramp-message vec 10 "%s" string) + ;; Enable our progress reporter. + (dolist (timer tl) + (if (eq (timer--function timer) #'tramp-progress-reporter-update) + (push timer timer-list))) (with-current-buffer (tramp-get-connection-buffer vec) ;; Clean up the buffer. We cannot call `erase-buffer' because ;; narrowing might be in effect. @@ -4189,17 +4197,20 @@ the remote host use line-endings as defined in the variable (string-equal (substring string -1) tramp-rsh-end-of-line)) (setq string (concat string tramp-rsh-end-of-line))) ;; Send the string. - (if (and chunksize (not (zerop chunksize))) - (let ((pos 0) - (end (length string))) - (while (< pos end) - (tramp-message - vec 10 "Sending chunk from %s to %s" - pos (min (+ pos chunksize) end)) - (process-send-string - p (substring string pos (min (+ pos chunksize) end))) - (setq pos (+ pos chunksize)))) - (process-send-string p string))))) + (with-local-quit + (if (and chunksize (not (zerop chunksize))) + (let ((pos 0) + (end (length string))) + (while (< pos end) + (tramp-message + vec 10 "Sending chunk from %s to %s" + pos (min (+ pos chunksize) end)) + (process-send-string + p (substring string pos (min (+ pos chunksize) end))) + (setq pos (+ pos chunksize)))) + (process-send-string p string))) + ;; Reenable the timers. + (with-timeout-unsuspend stimers)))) (defun tramp-get-inode (vec) "Returns the virtual inode number. -- 2.39.2