help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

BUG in Tramp: After sleep, saving file hangs


From: ken
Subject: BUG in Tramp: After sleep, saving file hangs
Date: Tue, 17 Jul 2018 08:12:55 -0400
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.8.0

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)





reply via email to

[Prev in Thread] Current Thread [Next in Thread]