Improve lock-pid handling in Tramp
* 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.
This commit is contained in:
parent
6ecb24f877
commit
bbfb373783
6 changed files with 20 additions and 28 deletions
|
@ -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
|
||||
|
|
|
@ -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)))
|
||||
|
||||
|
|
|
@ -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)))
|
||||
|
||||
|
|
|
@ -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)))
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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]
|
||||
|
|
Loading…
Add table
Reference in a new issue