]> git.eshelyaron.com Git - emacs.git/commitdiff
Improve lock-pid handling in Tramp
authorMichael Albinus <michael.albinus@gmx.de>
Thu, 9 Dec 2021 19:03:16 +0000 (20:03 +0100)
committerMichael Albinus <michael.albinus@gmx.de>
Thu, 9 Dec 2021 19:03:16 +0000 (20:03 +0100)
* lisp/net/tramp-cache.el: Remove comment.

* lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection):
* lisp/net/tramp-rclone.el (tramp-rclone-maybe-open-connection):
* lisp/net/tramp-sshfs.el (tramp-sshfs-maybe-open-connection):
* lisp/net/tramp-sudoedit.el (tramp-sudoedit-maybe-open-connection):
Do not set "lock-pid" connection-property.
(tramp-sudoedit-handle-delete-file): Use "rm -f".

* lisp/net/tramp.el (tramp-test-message): Extend for buffers w/o
remote default-directory.
(tramp-lock-pid): New defvar.
(tramp-get-lock-pid): Reimplement.

lisp/net/tramp-cache.el
lisp/net/tramp-gvfs.el
lisp/net/tramp-rclone.el
lisp/net/tramp-sshfs.el
lisp/net/tramp-sudoedit.el
lisp/net/tramp.el

index f2be297d59c2436060205f54120df9bd1f33ca50..b909c5706d683294551c0b2c14489603b3fdb448 100644 (file)
@@ -49,8 +49,6 @@
 ;;   an open connection.  Examples: "scripts" keeps shell script
 ;;   definitions already sent to the remote shell, "last-cmd-time" is
 ;;   the time stamp a command has been sent to the remote process.
-;;   "lock-pid" is the timestamp a (network) process is created, it is
-;;   used instead of the pid in file locks.
 ;;
 ;; - The key is nil.  These are temporary properties related to the
 ;;   local machine.  Examples: "parse-passwd" and "parse-group" keep
index d7af0d34bd5d2a46f771de80ca147248ad7a16d6..6b0299aa09765d3c0d762559ddc10eac1bb7ccfd 100644 (file)
@@ -2125,9 +2125,6 @@ connection if a previous connection has died for some reason."
       (process-put p 'vector vec)
       (set-process-query-on-exit-flag p nil)
 
-      ;; Mark process for filelock.
-      (tramp-set-connection-property p "lock-pid" (truncate (time-to-seconds)))
-
       ;; Set connection-local variables.
       (tramp-set-connection-local-variables vec)))
 
index 09862c6a04c637b208d7510be3c930ddd65d62bf..71ec2607a30d316003ffb68ce9cd35f25642d593 100644 (file)
@@ -368,10 +368,6 @@ connection if a previous connection has died for some reason."
          (process-put p 'vector vec)
          (set-process-query-on-exit-flag p nil)
 
-         ;; Mark process for filelock.
-         (tramp-set-connection-property
-          p "lock-pid" (truncate (time-to-seconds)))
-
          ;; Set connection-local variables.
          (tramp-set-connection-local-variables vec)))
 
index a19c99316e62acbbfb9eebc5466309eb290225b5..ef1f302546a3c54a4277affb11cac7acbd57c425 100644 (file)
@@ -345,9 +345,6 @@ connection if a previous connection has died for some reason."
       (process-put p 'vector vec)
       (set-process-query-on-exit-flag p nil)
 
-      ;; Mark process for filelock.
-      (tramp-set-connection-property p "lock-pid" (truncate (time-to-seconds)))
-
       ;; Set connection-local variables.
       (tramp-set-connection-local-variables vec)))
 
index 0309b6b02273c9e1818fc95e66a6a748fe32f816..88e8c43534b2301858dd5d8011e168ddcc15e19d 100644 (file)
@@ -336,7 +336,7 @@ absolute file names."
     (if (and delete-by-moving-to-trash trash)
        (move-file-to-trash filename)
       (unless (tramp-sudoedit-send-command
-              v "rm" (tramp-compat-file-name-unquote localname))
+              v "rm" "-f" (tramp-compat-file-name-unquote localname))
        ;; Propagate the error.
        (with-current-buffer (tramp-get-connection-buffer v)
          (goto-char (point-min))
@@ -788,9 +788,6 @@ connection if a previous connection has died for some reason."
       (process-put p 'vector vec)
       (set-process-query-on-exit-flag p nil)
 
-      ;; Mark process for filelock.
-      (tramp-set-connection-property p "lock-pid" (truncate (time-to-seconds)))
-
       ;; Set connection-local variables.
       (tramp-set-connection-local-variables vec)
 
index 7dddd84e556646fe8953abb80eb555ffe9433292..6b05dadc0e5647769abd76f38d979352308316ba 100644 (file)
@@ -2233,10 +2233,14 @@ the resulting error message."
 
 (defun tramp-test-message (fmt-string &rest arguments)
   "Emit a Tramp message according `default-directory'."
-  (if (tramp-tramp-file-p default-directory)
-      (apply #'tramp-message
-            (tramp-dissect-file-name default-directory) 0 fmt-string arguments)
-    (apply #'message fmt-string arguments)))
+  (cond
+   ((tramp-tramp-file-p default-directory)
+    (apply #'tramp-message
+          (tramp-dissect-file-name default-directory) 0 fmt-string arguments))
+   ((tramp-file-name-p (car tramp-current-connection))
+    (apply #'tramp-message
+          (car tramp-current-connection) 0 fmt-string arguments))
+   (t (apply #'message fmt-string arguments))))
 
 (put #'tramp-test-message 'tramp-suppress-trace t)
 
@@ -3958,16 +3962,19 @@ Return nil when there is no lockfile."
               (insert-file-contents-literally lockname)
               (buffer-string))))))
 
+(defvar tramp-lock-pid nil
+  "A random nunber local for every connection.
+Do not set it manually, it is used buffer-local in `tramp-get-lock-pid'")
+
 (defun tramp-get-lock-pid (file)
   "Determine pid for lockfile of FILE."
-  ;; Some Tramp methods do not offer a connection process, but just a
-  ;; network process as a place holder.  Those processes use the
-  ;; "lock-pid" connection property as fake pid, in fact it is the
-  ;; time stamp the process is created.
-  (let ((p (tramp-get-process  (tramp-dissect-file-name file))))
-    (number-to-string
-     (or (process-id p)
-        (tramp-get-connection-property p "lock-pid" (emacs-pid))))))
+  ;; Not all Tramp methods use an own process.  So we use a random
+  ;; number, which is as good as a process id.
+  (with-current-buffer
+      (tramp-get-connection-buffer (tramp-dissect-file-name file))
+    (or tramp-lock-pid
+       (setq-local
+        tramp-lock-pid (number-to-string (random most-positive-fixnum))))))
 
 (defconst tramp-lock-file-info-regexp
   ;; USER@HOST.PID[:BOOT_TIME]