unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#49954: 28.0.50; TRAMP: cannot kill child processes: "Forbidden reentrant call of Tramp"
@ 2021-08-09  9:08 Dima Kogan
  2021-08-09 12:33 ` Michael Albinus
  0 siblings, 1 reply; 14+ messages in thread
From: Dima Kogan @ 2021-08-09  9:08 UTC (permalink / raw)
  To: 49954

Hi. I see this problem often in everyday use of emacs, but every time I
try to construct a reliable reproducing recipe, it always works ok, so
some of this report is a request for debugging help.

I've seen this sort of bug for years, so probably it exists in the
latest emacs. Today I'm seeing it in a build from a few weeks ago:
553ad9c9e85 built on 20210716. I don't know how to reproduce in the
latest emacs. In the session I have running (from the 20210716 build) I
have a shell buffer that shows the problem 100% of the time. New shell
buffers do not show this problem.

A recipe that should work:

1. emacs
   Run emacs. Possibly my config is triggering it. I don't know

2. C-x C-f /ssh:server:
   Open a remote TRAMP connection

3. M-x shell
   Open a remote shell

4. cat
   Run a "cat" command in the remote shell

5. C-c C-c
   kill the "cat"

In fresh emacs sessions and fresh shell buffers this works fine: the
"cat" process is killed and we get back to the prompt. Something happens
with older shell buffers where the child process is NOT killed, and
emacs complains with "Forbidden reentrant call of Tramp"

I just tried to (setq tramp-verbose 10) to get a debug log of the
failure. It says this:

  ;; Emacs: 28.0.50 Tramp: 2.5.1 -*- mode: outline; coding: utf-8; -*-
  ;; Location: /usr/share/emacs/28.0.50/lisp/net/tramp.el.gz Git: /
  01:49:39.391745 tramp-interrupt-process (5) # Interrupt process shell<6> with pid 3705628
  01:49:39.391864 tramp-get-connection-property (7) # null-device /dev/null; cache used: t
  01:49:39.391946 tramp-get-connection-property (7) # process-name nil; cache used: nil
  01:49:39.392019 tramp-get-connection-property (7) # process-name nil; cache used: nil
  01:49:39.392089 tramp-get-connection-property (7) # process-buffer nil; cache used: nil
  01:49:39.392180 tramp-get-connection-property (7) # last-cmd-time (24848 60388 520023 896000); cache used: t
  01:49:39.392262 tramp-get-connection-property (7) # process-name nil; cache used: nil
  01:49:39.392325 tramp-get-connection-property (7) # remote-echo nil; cache used: nil
  01:49:39.392385 tramp-send-command (6) # echo are you awake
  01:49:39.392447 tramp-get-connection-property (7) # process-name nil; cache used: nil
  01:49:39.392509 tramp-get-connection-property (7) # chunksize 0; cache used: t
  01:49:39.392573 tramp-set-connection-property (7) # last-cmd-time (24848 60451 392543 712000)
  01:49:39.392637 tramp-send-string (10) # echo are you awake
  01:49:39.392698 tramp-get-connection-property (7) # process-buffer nil; cache used: nil
  01:49:39.392775 tramp-get-connection-property (7) # locked nil; cache used: nil
  01:49:39.392828 tramp-set-connection-property (7) # locked t
  01:49:39.392912 tramp-flush-connection-property (7) # locked
  01:49:39.392981 tramp-get-connection-property (7) # check-remote-echo nil; cache used: nil
  01:49:39.393036 tramp-get-connection-property (7) # check-remote-echo nil; cache used: nil
  01:49:39.393120 tramp-get-connection-property (7) # locked nil; cache used: nil
  01:49:39.393173 tramp-set-connection-property (7) # locked t
  01:49:39.441305 tramp-accept-process-output (10) # *tramp/ssh fatty* nil run t
  are you awake
  ///66c246702753a7fa497f74164e69b140#$
  01:49:39.441619 tramp-flush-connection-property (7) # locked
  01:49:39.441783 tramp-get-connection-property (7) # check-remote-echo nil; cache used: nil
  01:49:39.441931 tramp-get-connection-property (7) # check-remote-echo nil; cache used: nil
  01:49:39.442103 tramp-wait-for-regexp (6) # 
  are you awake
  ///66c246702753a7fa497f74164e69b140#$
  01:49:39.442387 tramp-get-connection-property (7) # process-name nil; cache used: nil
  01:49:39.442556 tramp-get-connection-property (7) # remote-echo nil; cache used: nil
  01:49:39.442710 tramp-send-command (6) # (\kill -2 -3705628 || \kill -2 3705628) 2>/dev/null
  01:49:39.442872 tramp-get-connection-property (7) # process-name nil; cache used: nil
  01:49:39.443034 tramp-get-connection-property (7) # chunksize 0; cache used: t
  01:49:39.443204 tramp-set-connection-property (7) # last-cmd-time (24848 60451 443130 172000)
  01:49:39.443376 tramp-send-string (10) # (\kill -2 -3705628 || \kill -2 3705628) 2>/dev/null
  01:49:39.443589 tramp-get-connection-property (7) # process-buffer nil; cache used: nil
  01:49:39.443792 tramp-get-connection-property (7) # locked nil; cache used: nil
  01:49:39.443936 tramp-set-connection-property (7) # locked t
  01:49:39.444124 tramp-flush-connection-property (7) # locked
  01:49:39.444293 tramp-get-connection-property (7) # check-remote-echo nil; cache used: nil
  01:49:39.444433 tramp-get-connection-property (7) # check-remote-echo nil; cache used: nil
  01:49:39.444579 tramp-get-connection-property (7) # locked nil; cache used: nil
  01:49:39.444719 tramp-set-connection-property (7) # locked t
  01:49:39.493255 tramp-accept-process-output (10) # *tramp/ssh fatty* nil run t
  ///66c246702753a7fa497f74164e69b140#$
  01:49:39.493535 tramp-flush-connection-property (7) # locked
  01:49:39.493687 tramp-get-connection-property (7) # check-remote-echo nil; cache used: nil
  01:49:39.493835 tramp-get-connection-property (7) # check-remote-echo nil; cache used: nil
  01:49:39.494001 tramp-wait-for-regexp (6) # 
  ///66c246702753a7fa497f74164e69b140#$
  01:49:39.494263 tramp-get-connection-property (7) # locked t; cache used: t
  01:49:39.512596 tramp-accept-process-output (10) # 
    backtrace()
    tramp-error(#<process shell<6>> remote-file-error "Forbidden reentrant call of Tramp")
    tramp-accept-process-output(#<process shell<6>> 0)
    tramp-interrupt-process(nil t)
    comint-interrupt-subjob()
    funcall-interactively(comint-interrupt-subjob)
    command-execute(comint-interrupt-subjob)
  01:49:41.733242 tramp-accept-process-output


If I open a fresh shell in the same emacs session, it works OK. That
debug log is similar, except the last tramp-get-connection-property line says:

  01:48:36.571873 tramp-get-connection-property (7) # locked nil; cache used: nil

I don't know how it's unlocked. Debugging suggestions? Should I just add
more diagnostics in every lock/unlock path? Do we think this may be
fixed in the latest emacs?

Thanks!





^ permalink raw reply	[flat|nested] 14+ messages in thread

* bug#49954: 28.0.50; TRAMP: cannot kill child processes: "Forbidden reentrant call of Tramp"
  2021-08-09  9:08 bug#49954: 28.0.50; TRAMP: cannot kill child processes: "Forbidden reentrant call of Tramp" Dima Kogan
@ 2021-08-09 12:33 ` Michael Albinus
  2021-08-10  4:26   ` Dima Kogan
  0 siblings, 1 reply; 14+ messages in thread
From: Michael Albinus @ 2021-08-09 12:33 UTC (permalink / raw)
  To: Dima Kogan; +Cc: 49954

Dima Kogan <dima@secretsauce.net> writes:

> Hi.

Hi Dima,

> I don't know how it's unlocked. Debugging suggestions? Should I just add
> more diagnostics in every lock/unlock path? Do we think this may be
> fixed in the latest emacs?

This error message has been added to Tramp 2.5 in order to get more
diagnostics when the problem happens. It is an indication that a remote
opeation has been started asynchronously, from a timer, a process filter
or sentinel, or other asynchronous invocation (like interrupt process).

I don't believe it has been fixed yet in Emacs master, I haven't done
anything in this area for weeks. I'll try to fix your use case, but it
might take time - these days I'm occupied otherwise. Holiday season.

See the respective entry in Tramp's FAQ (info "(tramp) Frequently Asked Questions")

See also the discussion on the Tramp ML
<https://lists.gnu.org/archive/cgi-bin/namazu.cgi?query=forbidden&submit=Search%21&idxname=tramp-devel&max=20&result=normal&sort=score>

> Thanks!

Best regards, Michael.





^ permalink raw reply	[flat|nested] 14+ messages in thread

* bug#49954: 28.0.50; TRAMP: cannot kill child processes: "Forbidden reentrant call of Tramp"
  2021-08-09 12:33 ` Michael Albinus
@ 2021-08-10  4:26   ` Dima Kogan
  2021-08-10 13:52     ` Michael Albinus
  0 siblings, 1 reply; 14+ messages in thread
From: Dima Kogan @ 2021-08-10  4:26 UTC (permalink / raw)
  To: Michael Albinus; +Cc: 49954

Hi Michael. There's no rush to work on this. I'll reply here for
whenever you get around to looking at it.

I did some debugging, and it appears that the tramp property-caching
mechanism is failing. We exit the (with-tramp-locked-connection ...)
form, but when we try to enter the next (with-tramp-locked-connection
...) form, it looks locked because

(tramp-get-connection-property proc "locked" nil)

is evaluating to t. I instrumented (tramp-get-connection-property), and
I can see that this t comes from the property cache. I can "fix" the bug
by removing the

    (when (and (not (eq cached tramp-cache-undefined))
	       ;; If the key is an auxiliary process object, check
	       ;; whether the process is still alive.
	       (not (and (processp key) (not (process-live-p key)))))
      (setq value cached
	    cache-used t))

form from (tramp-get-connection-property)

Can I get the intent of this form? Are you trying to use this form if
the process is alive, or if the process is dead? My process is very much
alive, so this form is being used. Is this what we want?

If it is what we want, then the cached value of t is the problem. I
haven't looked into why that's happening yet.

Thanks!





^ permalink raw reply	[flat|nested] 14+ messages in thread

* bug#49954: 28.0.50; TRAMP: cannot kill child processes: "Forbidden reentrant call of Tramp"
  2021-08-10  4:26   ` Dima Kogan
@ 2021-08-10 13:52     ` Michael Albinus
  2021-09-11  8:32       ` Dima Kogan
  0 siblings, 1 reply; 14+ messages in thread
From: Michael Albinus @ 2021-08-10 13:52 UTC (permalink / raw)
  To: Dima Kogan; +Cc: 49954

Dima Kogan <dima@secretsauce.net> writes:

> Hi Michael.

Hi Dima,

> I did some debugging, and it appears that the tramp property-caching
> mechanism is failing. We exit the (with-tramp-locked-connection ...)
> form, but when we try to enter the next (with-tramp-locked-connection
> ...) form, it looks locked because
>
> (tramp-get-connection-property proc "locked" nil)
>
> is evaluating to t. I instrumented (tramp-get-connection-property), and
> I can see that this t comes from the property cache. I can "fix" the bug
> by removing the
>
>     (when (and (not (eq cached tramp-cache-undefined))
> 	       ;; If the key is an auxiliary process object, check
> 	       ;; whether the process is still alive.
> 	       (not (and (processp key) (not (process-live-p key)))))
>       (setq value cached
> 	    cache-used t))
>
> form from (tramp-get-connection-property)
>
> Can I get the intent of this form? Are you trying to use this form if
> the process is alive, or if the process is dead? My process is very much
> alive, so this form is being used. Is this what we want?

No, I believe the mechanism is working correctly. A lock is placed on
the connection process of Tramp, and it is kept until the related
operation has finished. The process is expected to be alive, the
additional check of process-live-p is just a reassurance.

> If it is what we want, then the cached value of t is the problem. I
> haven't looked into why that's happening yet.

The problem is the following: Tramp sends a (shell) command to the
remote host, and waits for the reply. This must be atomic, no other
command shall be sent in parallel, in order to get the proper reply.

If there is asynchronous code running, from a timer, a process filter or
sentinel, or process interrupt, this can happen: a second command is
sent, while the other command didn't get its reply yet. The macro
with-tramp-locked-connection shall protect us in this case, and it
raises the respective error. That's not a perfect solution. A better way
would do use threads with mutexes, so that the second command can wait
until the first command got its reply. Something like this needs to be
implemented.

> Thanks!

Best regards, Michael.





^ permalink raw reply	[flat|nested] 14+ messages in thread

* bug#49954: 28.0.50; TRAMP: cannot kill child processes: "Forbidden reentrant call of Tramp"
  2021-08-10 13:52     ` Michael Albinus
@ 2021-09-11  8:32       ` Dima Kogan
  2021-09-11 12:19         ` Michael Albinus
  0 siblings, 1 reply; 14+ messages in thread
From: Dima Kogan @ 2021-09-11  8:32 UTC (permalink / raw)
  To: Michael Albinus; +Cc: 49954

Hi Michael.

So I've seen this a number of times now, and it really looks like the
caching mechanism is the problem. Every time I see "Forbidden reentrant
call of Tramp" when trying to C-c C-c a remote process, I re-evaluate
tramp-get-connection-property with

  (when (and (not (eq cached tramp-cache-undefined))
             ;; If the key is an auxiliary process object, check
             ;; whether the process is still alive.
             (not (and (processp key) (not (process-live-p key)))))
    (setq value cached
          cache-used t))

removed. This effectively disables the caching mechanism. Then I can C-c
C-c my process, and it dies like it's supposed to. TRAMP feels slower
after than, as expected, so I put tramp-get-connection-property back to
what it was. Eventually the problem comes back, and I do the same dance
to "fix" it.





^ permalink raw reply	[flat|nested] 14+ messages in thread

* bug#49954: 28.0.50; TRAMP: cannot kill child processes: "Forbidden reentrant call of Tramp"
  2021-09-11  8:32       ` Dima Kogan
@ 2021-09-11 12:19         ` Michael Albinus
  2021-09-15  0:39           ` Dima Kogan
  0 siblings, 1 reply; 14+ messages in thread
From: Michael Albinus @ 2021-09-11 12:19 UTC (permalink / raw)
  To: Dima Kogan; +Cc: 49954

Dima Kogan <dima@secretsauce.net> writes:

> Hi Michael.

Hi Dima,

> So I've seen this a number of times now, and it really looks like the
> caching mechanism is the problem.

No, it isn't. Tramp uses its cache just as memory. The problem is
somewhere else, see below.

> Every time I see "Forbidden reentrant call of Tramp" when trying to
> C-c C-c a remote process, I re-evaluate tramp-get-connection-property
> with
>
>   (when (and (not (eq cached tramp-cache-undefined))
>              ;; If the key is an auxiliary process object, check
>              ;; whether the process is still alive.
>              (not (and (processp key) (not (process-live-p key)))))
>     (setq value cached
>           cache-used t))
>
> removed. This effectively disables the caching mechanism. Then I can C-c
> C-c my process, and it dies like it's supposed to. TRAMP feels slower
> after than, as expected, so I put tramp-get-connection-property back to
> what it was. Eventually the problem comes back, and I do the same dance
> to "fix" it.

The Tramp manual tells you how to bypass the problem, see Frequently
Asked Questions:

--8<---------------cut here---------------start------------->8---
   • I get an error ‘Remote file error: Forbidden reentrant call of
     Tramp’

     Timers, process filters and sentinels, and other event based
     functions can run at any time, when a remote file operation is
     still running.  This can cause TRAMP to block.  When such a
     situation is detected, this error is triggered.  It should be fixed
     in the respective function (sending an error report will help), but
     for the time being you can suppress this error by the following
     code in your ‘~/.emacs’:

          (setq debug-ignored-errors
                (cons 'remote-file-error debug-ignored-errors))
--8<---------------cut here---------------end--------------->8---

In order to understand the problem, let's assume the following scenario:

- You have connected to a remote host, say "/ssh:host:". Tramp uses
  internally the process *tramp/ssh host* for communicating with that
  process.

- You have also started another asynchronous process to that remote
  host.

- Now, while normal use of Emacs, the function (file-attributes
  "/ssh:host:/path/to/file") is called. Tramp sends a command to the
  process *tramp/ssh host*, like "stat /path/to/file".

- While Tramp waits for the answer of the "stat ..." command, your other
  process has finished. It might have a process sentinel, which is
  called exactly at this time, because Tramp is in a loop
  (accept-process-output ...).

- This process filter might trigger another file operation, like
  (delete-file "/ssh:host:/tmp/tmpfile"). This would require to send
  another command to the *tramp/ssh host* process like "rm -f /tmp/tmpfile".

- Since the first command, "stat ...", hasn't been finished, this would
  result in inconsistencies. Tramp detects this situation, and raises
  the "Forbidden reentrant call of Tramp" error.

Not so easy to solve. Ideally, remote file name functions initiated in
process filters, process sentinels, timers and alike shall wait, until
the currently executed remote command has finished. Don't know how to
achieve this.

Best regards, Michael.





^ permalink raw reply	[flat|nested] 14+ messages in thread

* bug#49954: 28.0.50; TRAMP: cannot kill child processes: "Forbidden reentrant call of Tramp"
  2021-09-11 12:19         ` Michael Albinus
@ 2021-09-15  0:39           ` Dima Kogan
  2021-09-15 19:25             ` Dima Kogan
  2021-09-16 15:42             ` Michael Albinus
  0 siblings, 2 replies; 14+ messages in thread
From: Dima Kogan @ 2021-09-15  0:39 UTC (permalink / raw)
  To: Michael Albinus; +Cc: 49954

Thanks for the explanation. What would be an example of an asynchronous
process? I have several remote 'M-x shell' buffers and probably some
dired buffers looking at remote directories. Is each 'M-x shell' child
an "asynchronous process" for the purposes of this issue?

Does it make sense to you that disabling caching fixes it?

Usually, I can C-c in "M-x shell" just fine. When this bug is triggered,
though, I cannot C-c in remote M-x shell processes at all: it fails each
time. Disabling the caching, getting one successful C-c, and re-enabling
it makes it work that time and in the future. Is this consistent with
the failure mechanism you're thinking of?

Thanks





^ permalink raw reply	[flat|nested] 14+ messages in thread

* bug#49954: 28.0.50; TRAMP: cannot kill child processes: "Forbidden reentrant call of Tramp"
  2021-09-15  0:39           ` Dima Kogan
@ 2021-09-15 19:25             ` Dima Kogan
  2021-09-16 15:45               ` Michael Albinus
  2021-09-16 15:42             ` Michael Albinus
  1 sibling, 1 reply; 14+ messages in thread
From: Dima Kogan @ 2021-09-15 19:25 UTC (permalink / raw)
  To: Michael Albinus; +Cc: 49954

I paid more attention to my usage patterns recently. I often have
multiple remote M-x shell buffers going at the same time, using the same
TRAMP connection. One shell might be running a long job, writing stuff
to the console, while I use another shell to do stuff. Could this usage
trigger the race condition you're talking about? If so, setting up an
experiment to try to reproduce the breakage wouldn't be too hard.





^ permalink raw reply	[flat|nested] 14+ messages in thread

* bug#49954: 28.0.50; TRAMP: cannot kill child processes: "Forbidden reentrant call of Tramp"
  2021-09-15  0:39           ` Dima Kogan
  2021-09-15 19:25             ` Dima Kogan
@ 2021-09-16 15:42             ` Michael Albinus
  2021-09-16 17:17               ` Dima Kogan
  1 sibling, 1 reply; 14+ messages in thread
From: Michael Albinus @ 2021-09-16 15:42 UTC (permalink / raw)
  To: Dima Kogan; +Cc: 49954

Dima Kogan <dima@secretsauce.net> writes:

Hi Dima,

> Thanks for the explanation. What would be an example of an asynchronous
> process? I have several remote 'M-x shell' buffers and probably some
> dired buffers looking at remote directories. Is each 'M-x shell' child
> an "asynchronous process" for the purposes of this issue?

It is an synchronous process, indeed.

> Does it make sense to you that disabling caching fixes it?
>
> Usually, I can C-c in "M-x shell" just fine. When this bug is triggered,
> though, I cannot C-c in remote M-x shell processes at all: it fails each
> time. Disabling the caching, getting one successful C-c, and re-enabling
> it makes it work that time and in the future. Is this consistent with
> the failure mechanism you're thinking of?

Why do you mess with Tramp's cache? Adding remote-file-error to
debug-ignored-errors, as  I have recommended, shall mask the error
sufficiently.

> Thanks

Best regards, Michael.





^ permalink raw reply	[flat|nested] 14+ messages in thread

* bug#49954: 28.0.50; TRAMP: cannot kill child processes: "Forbidden reentrant call of Tramp"
  2021-09-15 19:25             ` Dima Kogan
@ 2021-09-16 15:45               ` Michael Albinus
  0 siblings, 0 replies; 14+ messages in thread
From: Michael Albinus @ 2021-09-16 15:45 UTC (permalink / raw)
  To: Dima Kogan; +Cc: 49954

Dima Kogan <dima@secretsauce.net> writes:

Hi Dima,

> I paid more attention to my usage patterns recently. I often have
> multiple remote M-x shell buffers going at the same time, using the same
> TRAMP connection. One shell might be running a long job, writing stuff
> to the console, while I use another shell to do stuff. Could this usage
> trigger the race condition you're talking about? If so, setting up an
> experiment to try to reproduce the breakage wouldn't be too hard.

I have not the problem to reproduce the bug,
tramp-test44-asynchronous-requests of tramp-tests.el is good enough.

My problem is to find a solution. I'm thinking about using threads, but
there are some hairy details I need to solve first.

Best regards, Michael.





^ permalink raw reply	[flat|nested] 14+ messages in thread

* bug#49954: 28.0.50; TRAMP: cannot kill child processes: "Forbidden reentrant call of Tramp"
  2021-09-16 15:42             ` Michael Albinus
@ 2021-09-16 17:17               ` Dima Kogan
  2021-09-16 17:36                 ` Michael Albinus
  0 siblings, 1 reply; 14+ messages in thread
From: Dima Kogan @ 2021-09-16 17:17 UTC (permalink / raw)
  To: Michael Albinus; +Cc: 49954

Michael Albinus <michael.albinus@gmx.de> writes:

> Why do you mess with Tramp's cache? Adding remote-file-error to
> debug-ignored-errors, as I have recommended, shall mask the error
> sufficiently.

Tweaking the cache is the method I've found to work, before I knew about
debug-ignored-errors. I'll do what you suggest next time.

Thanks





^ permalink raw reply	[flat|nested] 14+ messages in thread

* bug#49954: 28.0.50; TRAMP: cannot kill child processes: "Forbidden reentrant call of Tramp"
  2021-09-16 17:17               ` Dima Kogan
@ 2021-09-16 17:36                 ` Michael Albinus
  2021-09-18 20:18                   ` Dima Kogan
  0 siblings, 1 reply; 14+ messages in thread
From: Michael Albinus @ 2021-09-16 17:36 UTC (permalink / raw)
  To: Dima Kogan; +Cc: 49954

Dima Kogan <dima@secretsauce.net> writes:

Hi Dima,

>> Why do you mess with Tramp's cache? Adding remote-file-error to
>> debug-ignored-errors, as I have recommended, shall mask the error
>> sufficiently.
>
> Tweaking the cache is the method I've found to work, before I knew about
> debug-ignored-errors. I'll do what you suggest next time.

Thanks! I didn't want to bash you, sorry.

> Thanks

Best regards, Michael.





^ permalink raw reply	[flat|nested] 14+ messages in thread

* bug#49954: 28.0.50; TRAMP: cannot kill child processes: "Forbidden reentrant call of Tramp"
  2021-09-16 17:36                 ` Michael Albinus
@ 2021-09-18 20:18                   ` Dima Kogan
  2021-09-18 20:50                     ` Michael Albinus
  0 siblings, 1 reply; 14+ messages in thread
From: Dima Kogan @ 2021-09-18 20:18 UTC (permalink / raw)
  To: Michael Albinus; +Cc: 49954

Hi. I just hit this error again, and tried to work around it with

  (setq debug-ignored-errors
    (cons 'remote-file-error debug-ignored-errors))

as you suggested. It doesn't work to kill the process, though. I C-c C-c
in my M-x shell, and it fails with a different error:

  tramp-accept-process-output: No catch for tag: non-essential, non-essential

Doing my caching dance actually makes C-c C-c do the right thing. Does
this make sense?





^ permalink raw reply	[flat|nested] 14+ messages in thread

* bug#49954: 28.0.50; TRAMP: cannot kill child processes: "Forbidden reentrant call of Tramp"
  2021-09-18 20:18                   ` Dima Kogan
@ 2021-09-18 20:50                     ` Michael Albinus
  0 siblings, 0 replies; 14+ messages in thread
From: Michael Albinus @ 2021-09-18 20:50 UTC (permalink / raw)
  To: Dima Kogan; +Cc: 49954

Dima Kogan <dima@secretsauce.net> writes:

> Hi.

Hi Dima,

> I just hit this error again, and tried to work around it with
>
>   (setq debug-ignored-errors
>     (cons 'remote-file-error debug-ignored-errors))
>
> as you suggested. It doesn't work to kill the process, though. I C-c C-c
> in my M-x shell, and it fails with a different error:
>
>   tramp-accept-process-output: No catch for tag: non-essential, non-essential
>
> Doing my caching dance actually makes C-c C-c do the right thing. Does
> this make sense?

If the "caching dance" helps you you might continue with this. But I
won't recommend it to the public, I fear too many undesired side-effects.

The best solution would be to fix the problem itself. As always.

Best regards, Michael.





^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2021-09-18 20:50 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-09  9:08 bug#49954: 28.0.50; TRAMP: cannot kill child processes: "Forbidden reentrant call of Tramp" Dima Kogan
2021-08-09 12:33 ` Michael Albinus
2021-08-10  4:26   ` Dima Kogan
2021-08-10 13:52     ` Michael Albinus
2021-09-11  8:32       ` Dima Kogan
2021-09-11 12:19         ` Michael Albinus
2021-09-15  0:39           ` Dima Kogan
2021-09-15 19:25             ` Dima Kogan
2021-09-16 15:45               ` Michael Albinus
2021-09-16 15:42             ` Michael Albinus
2021-09-16 17:17               ` Dima Kogan
2021-09-16 17:36                 ` Michael Albinus
2021-09-18 20:18                   ` Dima Kogan
2021-09-18 20:50                     ` Michael Albinus

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).