[opensuse] BUG in Tramp: After sleep, saving file hangs
Here's the scenario: Both the local and the remote machines are running linux. The local machine is a laptop. The remote is headless and runs sshd. I often use tramp to work on files on the remote machine from the local machine. So I'll open a file on the remote machine with tramp, work on it for a time, then some time later put the local machine into sleep mode. Going into sleep mode obviously causes all internet connections to be lost, including all of those from the local machine to the remote machine. So, as is almost always the case, if I have a terminal window open from the local to the remote via ssh, it is lost when the local is put to sleep, and upon waking I must rerun "ssh remote-machine" to get it back. That's to be expected (at least until ssh becomes a lot more refined and sophisticated). Similarly, when I have a remote file open in tramp/emacs, put the local machine to sleep, bring it out of sleep, and then try to work on that remote file some more, then there is the problem. Specifically, I can edit the buffer, but when I try to save the buffer, emacs hangs, for minutes if I wait that long. I can always break that hang by doing "C-g". But then the file will not be saved. Sometimes if I try "C-x C-s" again, it will work, and the buffer will be saved, but not always. Sometimes it will take third or fourth attempt to save the remote buffer. But sometimes even that many repeated attempts all fail. Yesterday, after multiple such attempts to save, all not working, I identified the "ssh -e remote-machine" process which was the child process to emacs and killed it -- after doing that, I did "C-x C-s" in emacs and the remote file was successfully saved. Sometimes with such a hang emacs will display Debugger output, most of the time it doesn't. Yesterday, prior to my killing the child ssh process emacs displayed the following (byte-code removed for brevity, sorry for any unintended word-wrapping): Debugger entered--Lisp error: (args-out-of-range 60 198) tramp-process-actions(#<process *tramp/scp lunar*> ["scp" nil "lunar" "/home/userd/dird/osten.html" nil] 198 ((tramp-login-prompt-regexp tramp-action-login) (tramp-password-prompt-regexp tramp-action-password) (tramp-wrong-passwd-regexp tramp-action-permission-denied) (shell-prompt-pattern tramp-action-succeed) (tramp-shell-prompt-pattern tramp-action-succeed) (tramp-yesno-prompt-regexp tramp-action-yesno) (tramp-yn-prompt-regexp tramp-action-yn) (tramp-terminal-prompt-regexp tramp-action-terminal) (tramp-process-alive-regexp tramp-action-process-alive)) 60) byte-code("...." [level tramp-verbose save-match-data-internal tramp-message-show-message fmt-string args match-data ((byte-code "...." [save-match-data-internal set-match-data evaporate] 3)) 3 apply message 0 "" 1 2 "Warning: " "Tramp: " 4 processp buffer-name process-buffer tramp-dissect-file-name vectorp tramp-debug-message format "(%d) # " vec-or-proc default-directory] 6) ((error)) (byte-code "...." [vec pr tm subrp make-progress-reporter functionp zerop tramp-file-name-user format "Opening connection for %s using %s" tramp-file-name-host tramp-file-name-method "Opening connection for %s@%s using %s" run-at-time 3 0.1 tramp-progress-reporter-update] 8) ((error)) ((byte-code "...." [tm vec args fmt-string level vec-or-proc subrp cancel-timer functionp 3 "%s...done" zerop tramp-file-name-user format "Opening connection for %s using %s" tramp-file-name-host tramp-file-name-method "Opening connection for %s@%s using %s" nil (byte-code "...." [level tramp-verbose save-match-data-internal tramp-message-show-message fmt-string args match-data ((byte-code "...." [save-match-data-internal set-match-data evaporate] 3)) 3 apply message 0 "" 1 2 "Warning: " "Tramp: " 4 processp buffer-name process-buffer tramp-dissect-file-name vectorp tramp-debug-message format "(%d) # " vec-or-proc default-directory] 6) ((error))] 9)) delete-process setenv "TERM" "LC_ALL" "C" "PROMPT_COMMAND" "PS1" tramp-compute-multi-hops temporary-file-directory eval standard-value fboundp temp-directory subrp functionp getenv "TEMP" file-directory-p file-name-as-directory "TMP" "TMPDIR" file-exists-p ...] 10) byte-code("...." [vec process-environment pos process-name p tramp-current-connection tramp-get-connection-process tramp-get-connection-property "process-name" nil copy-sequence tramp-get-connection-buffer processp process-status (run open) butlast append tramp-time-diff current-time 5 throw suppress (byte-code "...." [p vec args fmt-string signal vec-or-proc tramp-time-diff current-time tramp-get-connection-property "last-cmd-time" (0 0 0) 60 processp process-status (run open) tramp-send-command "echo are you awake" t (run open) tramp-wait-for-output 10 file-error "Awake did fail" nil 1 "%s" error-message-string error-message apply format (byte-code "...." [level tramp-verbose save-match-data-internal tramp-message-show-message fmt-string args match-data ((byte-code "...." [save-match-data-internal set-match-data evaporate] 3)) 3 apply message 0 "" 1 2 "Warning: " "Tramp: " 4 processp buffer-name process-buffer tramp-dissect-file-name vectorp tramp-debug-message format "(%d) # " vec-or-proc default-directory] 6) ((error)) tramp-message-show-message level] 10) ((file-error (byte-code "...." [vec p tramp-cleanup nil] 3))) err (byte-code "...." [p vec tm pr args fmt-string processp process-status (run open) tramp-get-buffer boundp non-essential throw nil 3 "%s..." zerop tramp-file-name-user format "Opening connection for %s using %s" tramp-file-name-host tramp-file-name-method "Opening connection for %s@%s using %s" (byte-code "...." [level tramp-verbose save-match-data-internal tramp-message-show-message fmt-string args match-data ((byte-code "...." [save-match-data-internal set-match-data evaporate] 3)) 3 apply message 0 "" 1 2 "Warning: " "Tramp: " 4 processp buffer-name process-buffer tramp-dissect-file-name vectorp tramp-debug-message format "(%d) # " vec-or-proc default-directory] 6) ((error)) (byte-code "...." [vec pr tm subrp make-progress-reporter functionp zerop tramp-file-name-user format "Opening connection for %s using %s" tramp-file-name-host tramp-file-name-method "Opening connection for %s@%s using %s" run-at-time 3 0.1 tramp-progress-reporter-update] 8) ((error)) ((byte-code "...." [tm vec args fmt-string level vec-or-proc subrp cancel-timer functionp 3 "%s...done" zerop tramp-file-name-user format "Opening connection for %s using %s" tramp-file-name-host tramp-file-name-method "Opening connection for %s@%s using %s" nil (byte-code "...." [level tramp-verbose save-match-data-internal tramp-message-show-message fmt-string args match-data ... 3 apply message 0 "" 1 2 "Warning: " "Tramp: " 4 processp buffer-name process-buffer tramp-dissect-file-name vectorp tramp-debug-message format "(%d) # " vec-or-proc default-directory] 6) ((error))] 9)) delete-process setenv "TERM" "LC_ALL" "C" "PROMPT_COMMAND" "PS1" tramp-compute-multi-hops temporary-file-directory eval standard-value fboundp temp-directory subrp functionp getenv "TEMP" file-directory-p file-name-as-directory "TMP" "TMPDIR" file-exists-p ...] 10) ((quit (byte-code "\302!\210\303 @ A\"\207" [vec err tramp-cleanup signal] 3)))] 6) tramp-maybe-open-connection(["scp" nil "lunar" "/home/userd/dird/osten.html" nil]) tramp-send-command(["scp" nil "lunar" "/home/userd/dird/osten.html" nil] "( (test -e /home/userd/dird/osten.html || test -h /home/userd/dird/osten.html) && \\stat -c '((\"%N\") %h %ue0 %ge0 %Xe0 %Ye0 %Ze0 %se0 \"%A\" t %ie0 -1)' /home/userd/dird/osten.html || echo nil) 2>/dev/null; echo tramp_exit_status $?") tramp-send-command-and-check(["scp" nil "lunar" "/home/userd/dird/osten.html" nil] "( (test -e /home/userd/dird/osten.html || test -h /home/userd/dird/osten.html) && \\stat -c '((\"%N\") %h %ue0 %ge0 %Xe0 %Ye0 %Ze0 %se0 \"%A\" t %ie0 -1)' /home/userd/dird/osten.html || echo nil)") tramp-barf-unless-okay(["scp" nil "lunar" "/home/userd/dird/osten.html" nil] "( (test -e /home/userd/dird/osten.html || test -h /home/userd/dird/osten.html) && \\stat -c '((\"%N\") %h %ue0 %ge0 %Xe0 %Ye0 %Ze0 %se0 \"%A\" t %ie0 -1)' /home/userd/dird/osten.html || echo nil)" "`%s' returns with error" "( (test -e /home/userd/dird/osten.html || test -h /home/userd/dird/osten.html) && \\stat -c '((\"%N\") %h %ue0 %ge0 %Xe0 %Ye0 %Ze0 %se0 \"%A\" t %ie0 -1)' /home/userd/dird/osten.html || echo nil)") tramp-send-command-and-read(["scp" nil "lunar" "/home/userd/dird/osten.html" nil] "( (test -e /home/userd/dird/osten.html || test -h /home/userd/dird/osten.html) && \\stat -c '((\"%N\") %h %ue0 %ge0 %Xe0 %Ye0 %Ze0 %se0 \"%A\" t %ie0 -1)' /home/userd/dird/osten.html || echo nil)") tramp-do-file-attributes-with-stat(["scp" nil "lunar" "/home/userd/dird/osten.html" nil] "/home/userd/dird/osten.html" integer) tramp-sh-handle-file-attributes("/scp:lunar:/home/userd/dird/osten.html") apply(tramp-sh-handle-file-attributes "/scp:lunar:/home/userd/dird/osten.html") tramp-sh-file-name-handler(file-attributes "/scp:lunar:/home/userd/dird/osten.html") apply(tramp-sh-file-name-handler file-attributes "/scp:lunar:/home/userd/dird/osten.html") byte-code("...." [suppress (apply foreign operation args)] 2) #[nil "...." [foreign result sf file-name-handler-alist d default-directory nil autoload boundp temporary-file-directory eval standard-value 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 non-essential (byte-code "...." [suppress (apply foreign operation args)] 2) 5 "Non-essential received in operation %s" append (byte-code "...." [level tramp-verbose save-match-data-internal tramp-message-show-message fmt-string args match-data ((byte-code "...." [save-match-data-internal set-match-data evaporate] 3)) 3 apply message 0 "" 1 2 "Warning: " "Tramp: " 4 processp buffer-name process-buffer tramp-dissect-file-name vectorp tramp-debug-message format "(%d) # " vec-or-proc default-directory] 6) ((error)) tramp-run-real-handler suppress 1 "Suppress received in operation %s" tramp-cleanup x v operation args fmt-string level vec-or-proc tramp-message-show-message] 7]() tramp-file-name-handler(file-attributes "/scp:lunar:/home/userd/dird/osten.html") file-attributes("/scp:lunar:/home/userd/dird/osten.html") tramp-sh-handle-verify-visited-file-modtime(#<buffer osten.html>) apply(tramp-sh-handle-verify-visited-file-modtime #<buffer osten.html>) tramp-sh-file-name-handler(verify-visited-file-modtime #<buffer osten.html>) apply(tramp-sh-file-name-handler verify-visited-file-modtime #<buffer osten.html>) byte-code("...." [suppress (apply foreign operation args)] 2) #[nil "...." [foreign result sf file-name-handler-alist d default-directory nil autoload boundp temporary-file-directory eval standard-value 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 non-essential (byte-code "...." [suppress (apply foreign operation args)] 2) 5 "Non-essential received in operation %s" append (byte-code "...." [level tramp-verbose save-match-data-internal tramp-message-show-message fmt-string args match-data ((byte-code "...." [save-match-data-internal set-match-data evaporate] 3)) 3 apply message 0 "" 1 2 "Warning: " "Tramp: " 4 processp buffer-name process-buffer tramp-dissect-file-name vectorp tramp-debug-message format "(%d) # " vec-or-proc default-directory] 6) ((error)) tramp-run-real-handler suppress 1 "Suppress received in operation %s" tramp-cleanup x v operation args fmt-string level vec-or-proc tramp-message-show-message] 7]() tramp-file-name-handler(verify-visited-file-modtime #<buffer osten.html>) verify-visited-file-modtime(#<buffer osten.html>) basic-save-buffer() save-buffer(1) call-interactively(save-buffer nil nil) -- To unsubscribe, e-mail: opensuse+unsubscribe@opensuse.org To contact the owner, e-mail: opensuse+owner@opensuse.org
Le 17/07/2018 à 14:12, ken a écrit :
Here's the scenario:
Both the local and the remote machines are running linux. The local machine is a laptop. The remote is headless and runs sshd.
may be use screen? https://dev.to/thiht/learn-to-use-screen-a-terminal-multiplexer-gl jdd -- http://dodin.org -- To unsubscribe, e-mail: opensuse+unsubscribe@opensuse.org To contact the owner, e-mail: opensuse+owner@opensuse.org
* jdd@dodin.org <jdd@dodin.org> [07-17-18 08:52]:
Le 17/07/2018 à 14:12, ken a écrit :
Here's the scenario:
Both the local and the remote machines are running linux. The local machine is a laptop. The remote is headless and runs sshd.
may be use screen?
https://dev.to/thiht/learn-to-use-screen-a-terminal-multiplexer-gl
or tmux (I prefer). -- (paka)Patrick Shanahan Plainfield, Indiana, USA @ptilopteri http://en.opensuse.org openSUSE Community Member facebook/ptilopteri Registered Linux User #207535 @ http://linuxcounter.net Photos: http://wahoo.no-ip.org/piwigo paka @ IRCnet freenode -- To unsubscribe, e-mail: opensuse+unsubscribe@opensuse.org To contact the owner, e-mail: opensuse+owner@opensuse.org
participants (3)
-
jdd@dodin.org
-
ken
-
Patrick Shanahan