Re: Default connection timeout for the sudo method

Michael Albinus <[email protected]> Sat, 16 Aug 2025 16:17:00 +0200
Newsgroups gmane.emacs.tramp
Message-ID <[email protected]>
--=-=-=
Content-Type: text/plain

Michael Albinus <[email protected]> writes:

Hi,

>> I suspect that the problem may be triggered by Tramp's session timeout, as I am seeing this message in the *Messages* window:
>>
>> Tramp: Timeout session /sudo:root@hostname:
>>
>> I fear that, after the session times out, Tramp gets confused about the previous lock file upon reconnection, and gets confused with the temporary file when saving, so that it leaves one of them behind.
>
> Good catch! I'll see what I can do. One idea is, that a session timeout
> is suppressed as long as there are modified buffers visiting a respective
> remote file.
>
>> If you edit a file, but do not save it, I am not sure that it is such a good idea for Tramp to let the connection timeout, especially if a lock file has been created.
>
> Indeed, see my comment above.

I've prepared a patch, see appended. It is on top of Tramp 2.8.0.1 from
GNU ELPA, which you must install first. Could you, pls, check?

>> Thanks in advance,
>>   rdiez

Best regards, Michael.


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment
Content-Transfer-Encoding: quoted-printable

diff --git a/lisp/tramp-sh.el b/lisp/tramp-sh.el
index 3c1f36fa..ca8f5b88 100644
=2D-- a/lisp/tramp-sh.el
+++ b/lisp/tramp-sh.el
@@ -5154,17 +5154,27 @@ Goes through the list `tramp-inline-compress-comma=
nds'."
 ;;;###tramp-autoload
 (defun tramp-timeout-session (vec)
   "Close the connection VEC after a session timeout.
-If there is just some editing, retry it after 5 seconds."
-  (if (and (tramp-get-connection-property
-	    (tramp-get-connection-process vec) "locked")
-	   (tramp-file-name-equal-p vec (car tramp-current-connection)))
-      (progn
-	(tramp-message
-	 vec 5 "Cannot timeout session, trying it again in %s seconds." 5)
-	(run-at-time 5 nil #'tramp-timeout-session vec))
+If there is just some editing, retry it after 5 seconds.
+If there is a odified buffer, suppress it."
+  (cond
+   ((and (tramp-get-connection-property
+	  (tramp-get-connection-process vec) "locked")
+	 (tramp-file-name-equal-p vec (car tramp-current-connection)))
     (tramp-message
-     vec 3 "Timeout session %s" (tramp-make-tramp-file-name vec 'noloc))
-    (tramp-cleanup-connection vec 'keep-debug nil 'keep-processes)))
+     vec 5 "Cannot timeout session, trying it again in %s seconds." 5)
+    (run-at-time 5 nil #'tramp-timeout-session vec))
+   ((seq-some
+     (lambda (buf)
+       (and-let*
+	   (((buffer-modified-p buf))
+	    (bfn (buffer-file-name buf))
+	    (v (tramp-ensure-dissected-file-name bfn))
+	    ((tramp-file-name-equal-p vec v)))))
+     (tramp-list-remote-buffers))
+    (tramp-message vec 5 "Cannot timeout session (modified buffer)."))
+   (t (tramp-message
+       vec 3 "Timeout session %s" (tramp-make-tramp-file-name vec 'noloc)=
)
+      (tramp-cleanup-connection vec 'keep-debug nil 'keep-processes))))
=20
 (defun tramp-maybe-open-connection (vec)
   "Maybe open a connection VEC.

--=-=-=--