Fix last change in tramp-adb-handle-make-process

* lisp/net/tramp-adb.el (tramp-adb-handle-make-process):
Fix process buffer management.
This commit is contained in:
Michael Albinus 2022-06-19 21:07:29 +02:00
parent 1de63a3969
commit 694d7984a3

View file

@ -955,18 +955,18 @@ implementation will be used."
name1 (format "%s<%d>" name i)))
(setq name name1)
(with-current-buffer (tramp-get-connection-buffer v)
(unwind-protect
;; We catch this event. Otherwise, `make-process'
;; could be called on the local host.
(save-excursion
(save-restriction
(with-tramp-saved-connection-property v "process-name"
(with-tramp-saved-connection-property v "process-buffer"
;; Set the new process properties.
(tramp-set-connection-property v "process-name" name)
(tramp-set-connection-property
v "process-buffer" buffer)
(with-tramp-saved-connection-property v "process-name"
(with-tramp-saved-connection-property v "process-buffer"
;; Set the new process properties.
(tramp-set-connection-property v "process-name" name)
(tramp-set-connection-property v "process-buffer" buffer)
(with-current-buffer (tramp-get-connection-buffer v)
(unwind-protect
;; We catch this event. Otherwise,
;; `make-process' could be called on the local
;; host.
(save-excursion
(save-restriction
;; Activate narrowing in order to save
;; BUFFER contents. Clear also the
;; modification time; otherwise we might be
@ -980,8 +980,7 @@ implementation will be used."
(clear-visited-file-modtime)
(narrow-to-region (point-max) (point-max))
;; We call `tramp-adb-maybe-open-connection',
;; in order to cleanup the prompt
;; afterwards.
;; in order to cleanup the prompt afterwards.
(tramp-adb-maybe-open-connection v)
(delete-region (point-min) (point-max))
;; Send the command.
@ -1001,55 +1000,58 @@ implementation will be used."
;; already.
(ignore-errors
(set-process-query-on-exit-flag p (null noquery))
(set-marker (process-mark p) (point))))
(set-marker (process-mark p) (point))
;; We must flush them here already;
;; otherwise `rename-file', `delete-file' or
;; `insert-file-contents' will fail.
(tramp-flush-connection-property v "process-name")
(tramp-flush-connection-property
v "process-buffer")
;; Copy tmpstderr file.
(when (and (stringp stderr)
(not (tramp-tramp-file-p stderr)))
(add-function
:after (process-sentinel p)
(lambda (_proc _msg)
(rename-file remote-tmpstderr stderr))))
;; Read initial output. Remove the
;; first line, which is the command
;; echo.
(unless (eq filter t)
(while
(progn
(goto-char (point-min))
(not (re-search-forward "[\n]" nil t)))
(tramp-accept-process-output p 0))
(delete-region (point-min) (point)))
;; Provide error buffer. This shows
;; only initial error messages; messages
;; arriving later on will be inserted
;; when the process is deleted. The
;; temporary file will exist until the
;; process is deleted.
(when (bufferp stderr)
(with-current-buffer stderr
(insert-file-contents-literally
remote-tmpstderr 'visit))
;; Delete tmpstderr file.
(add-function
:after (process-sentinel p)
(lambda (_proc _msg)
(with-current-buffer stderr
(insert-file-contents-literally
remote-tmpstderr 'visit nil nil 'replace))
(delete-file remote-tmpstderr))))
;; Return process.
p))))
;; Copy tmpstderr file. "process-buffer"
;; and "process-name" must be reset already;
;; otherwise `rename-file', `delete-file' or
;; `insert-file-contents' will fail.
(when (and (stringp stderr)
(not (tramp-tramp-file-p stderr)))
(add-function
:after (process-sentinel p)
(lambda (_proc _msg)
(rename-file remote-tmpstderr stderr))))
;; Read initial output. Remove the first
;; line, which is the command echo.
(unless (eq filter t)
(while
(progn
(goto-char (point-min))
(not (re-search-forward "[\n]" nil t)))
(tramp-accept-process-output p 0))
(delete-region (point-min) (point)))
;; Provide error buffer. This shows only
;; initial error messages; messages arriving
;; later on will be inserted when the
;; process is deleted. The temporary file
;; will exist until the process is deleted.
(when (bufferp stderr)
(with-current-buffer stderr
(insert-file-contents-literally
remote-tmpstderr 'visit))
;; Delete tmpstderr file.
(add-function
:after (process-sentinel p)
(lambda (_proc _msg)
(with-current-buffer stderr
(insert-file-contents-literally
remote-tmpstderr 'visit nil nil 'replace))
(delete-file remote-tmpstderr))))
;; Return process.
p))))
;; Save exit.
;; FIXME: Does `tramp-get-connection-process' return
;; the proper value?
(if (string-prefix-p tramp-temp-buffer-name (buffer-name))
(ignore-errors
(set-process-buffer (tramp-get-connection-process v) nil)
(kill-buffer (current-buffer)))
(set-buffer-modified-p bmp))))))))))
;; Save exit.
(if (string-prefix-p tramp-temp-buffer-name (buffer-name))
(ignore-errors
(set-process-buffer
(tramp-get-connection-process v) nil)
(kill-buffer (current-buffer)))
(set-buffer-modified-p bmp))))))))))))
(defun tramp-adb-handle-exec-path ()
"Like `exec-path' for Tramp files."