Subject: Re: bug#49954: 28.0.50; TRAMP: cannot kill child processes: "Forbidden reentrant call of Tramp"

From: Dima Kogan <[email-masked]>
Date: Mon, 09 Aug 2021 21:26:38 -0700

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!