unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Re: master 2c79a8f 2/2: Use posix_spawn if possible.
@ 2022-01-25  6:48 Saulius Menkevicius
  2022-01-25  8:41 ` Eli Zaretskii
  2022-01-25 13:15 ` master 2c79a8f 2/2: Use posix_spawn if possible Stefan Monnier
  0 siblings, 2 replies; 39+ messages in thread
From: Saulius Menkevicius @ 2022-01-25  6:48 UTC (permalink / raw)
  To: emacs-devel; +Cc: p.stephani2, alan, mituharu

Hi,

I know this has been merged a couple of months ago to `master` but I 
would like to report breakage that occurs due to that commit.

We have csharp-ls (C#) and fsautocomplete (F#) LSP servers that stopped 
working with that commit (git-bisected to 
a60053f8368e058229721f1bf1567c2b1676b239).

I did not delve too much into the details or prepare a minimal test case 
but this appears to be an interplay between dotnet runtime (v6) and 
posix_spawn.

Not sure if that warrants a revert but just a heads-up.

-Saulius




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

* Re: master 2c79a8f 2/2: Use posix_spawn if possible.
  2022-01-25  6:48 master 2c79a8f 2/2: Use posix_spawn if possible Saulius Menkevicius
@ 2022-01-25  8:41 ` Eli Zaretskii
  2022-01-25  8:58   ` Saulius Menkevicius
  2022-01-25 13:15 ` master 2c79a8f 2/2: Use posix_spawn if possible Stefan Monnier
  1 sibling, 1 reply; 39+ messages in thread
From: Eli Zaretskii @ 2022-01-25  8:41 UTC (permalink / raw)
  To: emacs-devel, Saulius Menkevicius; +Cc: p.stephani2, alan, mituharu

On January 25, 2022 8:48:12 AM GMT+02:00, Saulius Menkevicius <sauliusmenkevicius@fastmail.com> wrote:
> Hi,
> 
> I know this has been merged a couple of months ago to `master` but I 
> would like to report breakage that occurs due to that commit.
> 
> We have csharp-ls (C#) and fsautocomplete (F#) LSP servers that stopped 
> working with that commit (git-bisected to 
> a60053f8368e058229721f1bf1567c2b1676b239).
> 
> I did not delve too much into the details or prepare a minimal test case 
> but this appears to be an interplay between dotnet runtime (v6) and 
> posix_spawn.
> 
> Not sure if that warrants a revert but just a heads-up.

Can you explain how dotnet runtime comes into play here?  Does Emacs invoke a dotnet process or something?

And on what OS does this happen?



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

* Re: master 2c79a8f 2/2: Use posix_spawn if possible.
  2022-01-25  8:41 ` Eli Zaretskii
@ 2022-01-25  8:58   ` Saulius Menkevicius
  2022-01-25 11:46     ` Jostein Kjønigsen
  2022-01-25 12:22     ` Eli Zaretskii
  0 siblings, 2 replies; 39+ messages in thread
From: Saulius Menkevicius @ 2022-01-25  8:58 UTC (permalink / raw)
  To: Eli Zaretskii, emacs-devel; +Cc: p.stephani2, alan, mituharu

Sorry I did not mention the platform, this happens on Linux/x64 and has 
been reported by multiple persons:

- https://github.com/razzmatazz/csharp-language-server/issues/12


The issue has been noticed when dotnet-based LSP servers are used with 
emacs/lsp-mode, -- in particular lsp-mode starts the server using 
`make-process` and then communicates over stdio. Link to the code that 
launches the server:

- https://github.com/emacs-lsp/lsp-mode/blob/master/lsp-mode.el#L6925


We have csharp-ls and fsac servers launched with the same mechanism as 
are for other languages -- which are working ok with posix_spawn 
enabled. It only breaks for those before-mentioned LSP servers that are 
implemented on top of dotnet and use dotnet runtime (same thing as JVM, 
but for C#/F#/CLR languages).

Now it appears, that switch to posix_spawn broke communication over 
stdio to those dotnet-based LSP servers for some technical reason, -- I 
didn't investigate yet why, because it is a bit over my head. I *think* 
there is an interplay between posix_spawn-based process launch 
implementation in emacs and dotnet runtime stdio abstractions/platform 
layer -- because otherwise other language servers work with that commit 
that enables posix_spawn, like those based on JVM too.


I know this is a bit of a corner case as posix_spawn brings performance 
benefits, but just FYI.

BR,

-Saulius Menkevicius


Am 25.01.22 um 10:41 schrieb Eli Zaretskii:
> On January 25, 2022 8:48:12 AM GMT+02:00, Saulius Menkevicius <sauliusmenkevicius@fastmail.com> wrote:
>> Hi,
>>
>> I know this has been merged a couple of months ago to `master` but I
>> would like to report breakage that occurs due to that commit.
>>
>> We have csharp-ls (C#) and fsautocomplete (F#) LSP servers that stopped
>> working with that commit (git-bisected to
>> a60053f8368e058229721f1bf1567c2b1676b239).
>>
>> I did not delve too much into the details or prepare a minimal test case
>> but this appears to be an interplay between dotnet runtime (v6) and
>> posix_spawn.
>>
>> Not sure if that warrants a revert but just a heads-up.
> Can you explain how dotnet runtime comes into play here?  Does Emacs invoke a dotnet process or something?
>
> And on what OS does this happen?



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

* Re: master 2c79a8f 2/2: Use posix_spawn if possible.
  2022-01-25  8:58   ` Saulius Menkevicius
@ 2022-01-25 11:46     ` Jostein Kjønigsen
  2022-01-25 11:55       ` Po Lu
  2022-01-25 12:22     ` Eli Zaretskii
  1 sibling, 1 reply; 39+ messages in thread
From: Jostein Kjønigsen @ 2022-01-25 11:46 UTC (permalink / raw)
  To: emacs-devel, Eli Zaretskii; +Cc: Saulius Menkevičius

[-- Attachment #1: Type: text/plain, Size: 3522 bytes --]

Like Saulius says, this is fairly technical and far above at least my head.

I still think it's worth discussing if we *need* this change for Linux. 
When the original commit was landed, (from what I can tell) it was 
because it was needed for Mac, and assumed harmless for other platforms. 
The merge to master was then meant as a testing-ground to see if it 
would cause issues.

And well.. Here's at least one issue :)

For perspective, over the last couple of years, Emacs as a 
editor/platform to work with .NET has improved tremendously to the point 
that Emacs is my primary editor for anything .NET. It would be a shame 
to see that completely break on Emacs 29, and being forced to use VSCode 
to get work done.

As things stand now, I think it sounds easier to revert this change (for 
Linux only) than trying to convince Microsoft to change the .NET runtime 
to better interop with Emacs on Linux :)

My 2 cents.

--
Kind regards
Jostein Kjønigsen

On 25.01.2022 09:58, Saulius Menkevicius wrote:
> Sorry I did not mention the platform, this happens on Linux/x64 and 
> has been reported by multiple persons:
>
> - https://github.com/razzmatazz/csharp-language-server/issues/12
>
>
> The issue has been noticed when dotnet-based LSP servers are used with 
> emacs/lsp-mode, -- in particular lsp-mode starts the server using 
> `make-process` and then communicates over stdio. Link to the code that 
> launches the server:
>
> - https://github.com/emacs-lsp/lsp-mode/blob/master/lsp-mode.el#L6925
>
>
> We have csharp-ls and fsac servers launched with the same mechanism as 
> are for other languages -- which are working ok with posix_spawn 
> enabled. It only breaks for those before-mentioned LSP servers that 
> are implemented on top of dotnet and use dotnet runtime (same thing as 
> JVM, but for C#/F#/CLR languages).
>
> Now it appears, that switch to posix_spawn broke communication over 
> stdio to those dotnet-based LSP servers for some technical reason, -- 
> I didn't investigate yet why, because it is a bit over my head. I 
> *think* there is an interplay between posix_spawn-based process launch 
> implementation in emacs and dotnet runtime stdio abstractions/platform 
> layer -- because otherwise other language servers work with that 
> commit that enables posix_spawn, like those based on JVM too.
>
>
> I know this is a bit of a corner case as posix_spawn brings 
> performance benefits, but just FYI.
>
> BR,
>
> -Saulius Menkevicius
>
>
> Am 25.01.22 um 10:41 schrieb Eli Zaretskii:
>> On January 25, 2022 8:48:12 AM GMT+02:00, Saulius Menkevicius 
>> <sauliusmenkevicius@fastmail.com> wrote:
>>> Hi,
>>>
>>> I know this has been merged a couple of months ago to `master` but I
>>> would like to report breakage that occurs due to that commit.
>>>
>>> We have csharp-ls (C#) and fsautocomplete (F#) LSP servers that stopped
>>> working with that commit (git-bisected to
>>> a60053f8368e058229721f1bf1567c2b1676b239).
>>>
>>> I did not delve too much into the details or prepare a minimal test 
>>> case
>>> but this appears to be an interplay between dotnet runtime (v6) and
>>> posix_spawn.
>>>
>>> Not sure if that warrants a revert but just a heads-up.
>> Can you explain how dotnet runtime comes into play here?  Does Emacs 
>> invoke a dotnet process or something?
>>
>> And on what OS does this happen?
>
-- 
Vennlig hilsen
*Jostein Kjønigsen*

jostein@kjonigsen.net 🍵 jostein@gmail.com 🍵 jostein@hufleslufs.no
https://jostein.kjønigsen.no <https://jostein.kjønigsen.no>

[-- Attachment #2: Type: text/html, Size: 5451 bytes --]

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

* Re: master 2c79a8f 2/2: Use posix_spawn if possible.
  2022-01-25 11:46     ` Jostein Kjønigsen
@ 2022-01-25 11:55       ` Po Lu
  0 siblings, 0 replies; 39+ messages in thread
From: Po Lu @ 2022-01-25 11:55 UTC (permalink / raw)
  To: Jostein Kjønigsen
  Cc: emacs-devel, Eli Zaretskii, jostein, Saulius Menkevičius

Jostein Kjønigsen <jostein@secure.kjonigsen.net> writes:

> Like Saulius says, this is fairly technical and far above at least my head.
>
> I still think it's worth discussing if we *need* this change for
> Linux. When the original commit was landed, (from what I can tell) it
> was because it was needed for Mac, and assumed harmless for other
> platforms. The merge to master was then meant as a testing-ground to
> see if it would cause issues.

FWIW, I think use of posix_spawn should only be enabled on macOS, as a
work around for Apple's recent changes to vfork.  There is no reason to
risk needlessly breaking things for people.



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

* Re: master 2c79a8f 2/2: Use posix_spawn if possible.
  2022-01-25  8:58   ` Saulius Menkevicius
  2022-01-25 11:46     ` Jostein Kjønigsen
@ 2022-01-25 12:22     ` Eli Zaretskii
  2022-01-25 12:25       ` Saulius Menkevicius
  1 sibling, 1 reply; 39+ messages in thread
From: Eli Zaretskii @ 2022-01-25 12:22 UTC (permalink / raw)
  To: Saulius Menkevicius; +Cc: p.stephani2, alan, mituharu, emacs-devel

> Date: Tue, 25 Jan 2022 10:58:51 +0200
> Cc: p.stephani2@gmail.com, alan@idiocy.org, mituharu@math.s.chiba-u.ac.jp
> From: Saulius Menkevicius <sauliusmenkevicius@fastmail.com>
> 
> Sorry I did not mention the platform, this happens on Linux/x64 and has 
> been reported by multiple persons:
> 
> - https://github.com/razzmatazz/csharp-language-server/issues/12
> 
> 
> The issue has been noticed when dotnet-based LSP servers are used with 
> emacs/lsp-mode, -- in particular lsp-mode starts the server using 
> `make-process` and then communicates over stdio. Link to the code that 
> launches the server:
> 
> - https://github.com/emacs-lsp/lsp-mode/blob/master/lsp-mode.el#L6925
> 
> 
> We have csharp-ls and fsac servers launched with the same mechanism as 
> are for other languages -- which are working ok with posix_spawn 
> enabled. It only breaks for those before-mentioned LSP servers that are 
> implemented on top of dotnet and use dotnet runtime (same thing as JVM, 
> but for C#/F#/CLR languages).
> 
> Now it appears, that switch to posix_spawn broke communication over 
> stdio to those dotnet-based LSP servers for some technical reason, -- I 
> didn't investigate yet why, because it is a bit over my head. I *think* 
> there is an interplay between posix_spawn-based process launch 
> implementation in emacs and dotnet runtime stdio abstractions/platform 
> layer -- because otherwise other language servers work with that commit 
> that enables posix_spawn, like those based on JVM too.

What is special about dotnet's runtime stdio usage?



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

* Re: master 2c79a8f 2/2: Use posix_spawn if possible.
  2022-01-25 12:22     ` Eli Zaretskii
@ 2022-01-25 12:25       ` Saulius Menkevicius
  2022-01-25 13:47         ` Eli Zaretskii
  0 siblings, 1 reply; 39+ messages in thread
From: Saulius Menkevicius @ 2022-01-25 12:25 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: p.stephani2, alan, mituharu, emacs-devel

I certainly cannot answer that, it probably does some kind of sniffing 
on FDs and changes behaviour.

To actually figure that out I would need to build a minimal test fixture 
for this bug/issue and submit to dotnet/runtime repo on github for them 
to check and/or fix it.

-Saulius

Am 25.01.22 um 14:22 schrieb Eli Zaretskii:
>> Date: Tue, 25 Jan 2022 10:58:51 +0200
>> Cc: p.stephani2@gmail.com, alan@idiocy.org, mituharu@math.s.chiba-u.ac.jp
>> From: Saulius Menkevicius <sauliusmenkevicius@fastmail.com>
>>
>> Sorry I did not mention the platform, this happens on Linux/x64 and has
>> been reported by multiple persons:
>>
>> - https://github.com/razzmatazz/csharp-language-server/issues/12
>>
>>
>> The issue has been noticed when dotnet-based LSP servers are used with
>> emacs/lsp-mode, -- in particular lsp-mode starts the server using
>> `make-process` and then communicates over stdio. Link to the code that
>> launches the server:
>>
>> - https://github.com/emacs-lsp/lsp-mode/blob/master/lsp-mode.el#L6925
>>
>>
>> We have csharp-ls and fsac servers launched with the same mechanism as
>> are for other languages -- which are working ok with posix_spawn
>> enabled. It only breaks for those before-mentioned LSP servers that are
>> implemented on top of dotnet and use dotnet runtime (same thing as JVM,
>> but for C#/F#/CLR languages).
>>
>> Now it appears, that switch to posix_spawn broke communication over
>> stdio to those dotnet-based LSP servers for some technical reason, -- I
>> didn't investigate yet why, because it is a bit over my head. I *think*
>> there is an interplay between posix_spawn-based process launch
>> implementation in emacs and dotnet runtime stdio abstractions/platform
>> layer -- because otherwise other language servers work with that commit
>> that enables posix_spawn, like those based on JVM too.
> What is special about dotnet's runtime stdio usage?



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

* Re: master 2c79a8f 2/2: Use posix_spawn if possible.
  2022-01-25  6:48 master 2c79a8f 2/2: Use posix_spawn if possible Saulius Menkevicius
  2022-01-25  8:41 ` Eli Zaretskii
@ 2022-01-25 13:15 ` Stefan Monnier
  1 sibling, 0 replies; 39+ messages in thread
From: Stefan Monnier @ 2022-01-25 13:15 UTC (permalink / raw)
  To: Saulius Menkevicius; +Cc: emacs-devel, p.stephani2, alan, mituharu

> I know this has been merged a couple of months ago to `master` but I would
> like to report breakage that occurs due to that commit.
>
> We have csharp-ls (C#) and fsautocomplete (F#) LSP servers that stopped
> working with that commit (git-bisected to
> a60053f8368e058229721f1bf1567c2b1676b239).
>
> I did not delve too much into the details or prepare a minimal test case but
> this appears to be an interplay between dotnet runtime (v6) and posix_spawn.
>
> Not sure if that warrants a revert but just a heads-up.

Whatever may be decided w.r.t this, could you `M-x report-emacs-bug` so
we get a bug-nb for this problem?
[ And of course, please include as many details as possible about when/where
  the bug shows up, and even ideally some kind of recipe, as usual.  ]


        Stefan




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

* Re: master 2c79a8f 2/2: Use posix_spawn if possible.
  2022-01-25 12:25       ` Saulius Menkevicius
@ 2022-01-25 13:47         ` Eli Zaretskii
  2022-01-28 17:12           ` Matt Armstrong
  0 siblings, 1 reply; 39+ messages in thread
From: Eli Zaretskii @ 2022-01-25 13:47 UTC (permalink / raw)
  To: Saulius Menkevicius; +Cc: p.stephani2, alan, mituharu, emacs-devel

> Date: Tue, 25 Jan 2022 14:25:23 +0200
> From: Saulius Menkevicius <sauliusmenkevicius@fastmail.com>
> Cc: p.stephani2@gmail.com, alan@idiocy.org, mituharu@math.s.chiba-u.ac.jp,
>  emacs-devel@gnu.org
> 
> I certainly cannot answer that, it probably does some kind of sniffing 
> on FDs and changes behaviour.
> 
> To actually figure that out I would need to build a minimal test fixture 
> for this bug/issue and submit to dotnet/runtime repo on github for them 
> to check and/or fix it.

I think there's no way around this.  We need at least to understand
what part of posix_spawn code interferes with pipe-based I/O used by
these LSP servers, and why.



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

* Re: master 2c79a8f 2/2: Use posix_spawn if possible.
  2022-01-25 13:47         ` Eli Zaretskii
@ 2022-01-28 17:12           ` Matt Armstrong
  2022-01-29  8:03             ` Saulius Menkevičius
  2022-01-29  8:26             ` Eli Zaretskii
  0 siblings, 2 replies; 39+ messages in thread
From: Matt Armstrong @ 2022-01-28 17:12 UTC (permalink / raw)
  To: Eli Zaretskii, Saulius Menkevicius
  Cc: p.stephani2, alan, mituharu, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

>> Date: Tue, 25 Jan 2022 14:25:23 +0200
>> From: Saulius Menkevicius <sauliusmenkevicius@fastmail.com>
>> Cc: p.stephani2@gmail.com, alan@idiocy.org, mituharu@math.s.chiba-u.ac.jp,
>>  emacs-devel@gnu.org
>> 
>> I certainly cannot answer that, it probably does some kind of sniffing 
>> on FDs and changes behaviour.
>> 
>> To actually figure that out I would need to build a minimal test fixture 
>> for this bug/issue and submit to dotnet/runtime repo on github for them 
>> to check and/or fix it.
>
> I think there's no way around this.  We need at least to understand
> what part of posix_spawn code interferes with pipe-based I/O used by
> these LSP servers, and why.

I don't find an emacs bug filed for this issue.  Saulius, it would be
good to file one.

This issue tickled a memory I had of Python moving away from posix_spawn
due to various portability issues: https://bugs.python.org/issue35823.
The issues they ran into and solved may inform this investigation.



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

* Re: master 2c79a8f 2/2: Use posix_spawn if possible.
  2022-01-28 17:12           ` Matt Armstrong
@ 2022-01-29  8:03             ` Saulius Menkevičius
  2022-01-29  8:26             ` Eli Zaretskii
  1 sibling, 0 replies; 39+ messages in thread
From: Saulius Menkevičius @ 2022-01-29  8:03 UTC (permalink / raw)
  To: Matt Armstrong; +Cc: Eli Zaretskii, emacs-devel, p.stephani2, mituharu, alan

I did not register it yet. I was thinking about making a reduced test suite for this (small dotnet app+emacs code) to replicate the issue first.

And then I am waiting for a M1 MacBook to have shipped to me to test if the commit to switch to posix_spawn broke just Linux or macOS too. I have reports of x64/Linux breakage only at this point.

—Saulius Menkevičius

> Am 2022-01-28 um 19:12 schrieb Matt Armstrong <matt@rfc20.org>:
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
>>> Date: Tue, 25 Jan 2022 14:25:23 +0200
>>> From: Saulius Menkevicius <sauliusmenkevicius@fastmail.com>
>>> Cc: p.stephani2@gmail.com, alan@idiocy.org, mituharu@math.s.chiba-u.ac.jp,
>>> emacs-devel@gnu.org
>>> 
>>> I certainly cannot answer that, it probably does some kind of sniffing 
>>> on FDs and changes behaviour.
>>> 
>>> To actually figure that out I would need to build a minimal test fixture 
>>> for this bug/issue and submit to dotnet/runtime repo on github for them 
>>> to check and/or fix it.
>> 
>> I think there's no way around this.  We need at least to understand
>> what part of posix_spawn code interferes with pipe-based I/O used by
>> these LSP servers, and why.
> 
> I don't find an emacs bug filed for this issue.  Saulius, it would be
> good to file one.
> 
> This issue tickled a memory I had of Python moving away from posix_spawn
> due to various portability issues: https://bugs.python.org/issue35823.
> The issues they ran into and solved may inform this investigation.




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

* Re: master 2c79a8f 2/2: Use posix_spawn if possible.
  2022-01-28 17:12           ` Matt Armstrong
  2022-01-29  8:03             ` Saulius Menkevičius
@ 2022-01-29  8:26             ` Eli Zaretskii
  2022-01-31 20:48               ` Saulius Menkevicius
  1 sibling, 1 reply; 39+ messages in thread
From: Eli Zaretskii @ 2022-01-29  8:26 UTC (permalink / raw)
  To: Matt Armstrong
  Cc: sauliusmenkevicius, p.stephani2, alan, mituharu, emacs-devel

> From: Matt Armstrong <matt@rfc20.org>
> Cc: p.stephani2@gmail.com, alan@idiocy.org, mituharu@math.s.chiba-u.ac.jp,
>  emacs-devel@gnu.org
> Date: Fri, 28 Jan 2022 09:12:22 -0800
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> >> To actually figure that out I would need to build a minimal test fixture 
> >> for this bug/issue and submit to dotnet/runtime repo on github for them 
> >> to check and/or fix it.
> >
> > I think there's no way around this.  We need at least to understand
> > what part of posix_spawn code interferes with pipe-based I/O used by
> > these LSP servers, and why.
> 
> I don't find an emacs bug filed for this issue.  Saulius, it would be
> good to file one.
> 
> This issue tickled a memory I had of Python moving away from posix_spawn
> due to various portability issues: https://bugs.python.org/issue35823.
> The issues they ran into and solved may inform this investigation.

Thanks.

I see nothing there about C#, nor even about problems with stdio
redirection in subprocesses.  There's some reference to closing file
descriptors above 2, but AFAIU the problems in this bug report are
related to descriptors that aren't above 2.



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

* Re: master 2c79a8f 2/2: Use posix_spawn if possible.
  2022-01-29  8:26             ` Eli Zaretskii
@ 2022-01-31 20:48               ` Saulius Menkevicius
  2022-02-01  9:59                 ` Robert Pluim
  0 siblings, 1 reply; 39+ messages in thread
From: Saulius Menkevicius @ 2022-01-31 20:48 UTC (permalink / raw)
  To: Eli Zaretskii, Matt Armstrong; +Cc: p.stephani2, alan, mituharu, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 3155 bytes --]

I did a bit more investigation (and still don't have a reproduction 
vehicle) but it seems the problem has to do with signals (SIGCHLD in 
particular) rather than stdio redirection.

Stack trace in the child process shows it has launched a subprocess 
which has since exited but the child did not receive (?) SIGCHLD and 
appears to be blocked.

Dotnet stack trace is

|[bob@fedora emacs]$ dotnet stack report -p 53193 Thread (0xCFC9): 
[Native Frames] 
System.Private.CoreLib!System.Threading.WaitHandle.WaitOneNoCheck(int32) 
System.Private.CoreLib!System.Threading.WaitHandle.WaitOne(int32) 
System.Diagnostics.Process!System.Diagnostics.ProcessWaitState.WaitForExit(int32) 
System.Diagnostics.Process!System.Diagnostics.Process.WaitForExitCore(int32) 
Microsoft.Build.Locator!Microsoft.Build.Locator.DotNetSdkLocationHelper+<GetDotNetBasePaths>d__5.MoveNext() 
Microsoft.Build.Locator!Microsoft.Build.Locator.DotNetSdkLocationHelper+<GetInstances>d__4.MoveNext() 
Microsoft.Build.Locator!Microsoft.Build.Locator.MSBuildLocator+<GetInstances>d__20.MoveNext() 
System.Linq!System.Linq.Enumerable.TryGetFirst(class 
System.Collections.Generic.IEnumerable`1<!!0>,bool&) 
System.Linq!System.Linq.Enumerable.FirstOrDefault(class 
System.Collections.Generic.IEnumerable`1<!!0>) 
Microsoft.Build.Locator!Microsoft.Build.Locator.MSBuildLocator.RegisterDefaults() 
CSharpLanguageServer!CSharpLanguageServer.Program.entry(class 
System.String[]) |

Where "ps axl" shows there is a zombie process waiting to be collected 
but is not.

|0 1000 53193 53129 20 0 3437284 59416 - Ssl ? 0:00 
/home/bob/src/csharp-language-server/src/CSharpLanguageServer/bin/Debug/net6.0/CSharpLanguageServer 
0 1000 53203 53193 20 0 0 0 - Z ? 0:00 [dotnet] <defunct> |


Related emacs src/callproc.cs has code that has this comment:

/* Stop blocking SIGCHLD in the child.  */

But I really don't know what should I do to attempt to fix this/find the 
cause.

-Saulius

Am 29.01.22 um 10:26 schrieb Eli Zaretskii:
>> From: Matt Armstrong<matt@rfc20.org>
>> Cc:p.stephani2@gmail.com,alan@idiocy.org,mituharu@math.s.chiba-u.ac.jp,
>>   emacs-devel@gnu.org
>> Date: Fri, 28 Jan 2022 09:12:22 -0800
>>
>> Eli Zaretskii<eliz@gnu.org>  writes:
>>
>>>> To actually figure that out I would need to build a minimal test fixture
>>>> for this bug/issue and submit to dotnet/runtime repo on github for them
>>>> to check and/or fix it.
>>> I think there's no way around this.  We need at least to understand
>>> what part of posix_spawn code interferes with pipe-based I/O used by
>>> these LSP servers, and why.
>> I don't find an emacs bug filed for this issue.  Saulius, it would be
>> good to file one.
>>
>> This issue tickled a memory I had of Python moving away from posix_spawn
>> due to various portability issues:https://bugs.python.org/issue35823.
>> The issues they ran into and solved may inform this investigation.
> Thanks.
>
> I see nothing there about C#, nor even about problems with stdio
> redirection in subprocesses.  There's some reference to closing file
> descriptors above 2, but AFAIU the problems in this bug report are
> related to descriptors that aren't above 2.

[-- Attachment #2: Type: text/html, Size: 4596 bytes --]

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

* Re: master 2c79a8f 2/2: Use posix_spawn if possible.
  2022-01-31 20:48               ` Saulius Menkevicius
@ 2022-02-01  9:59                 ` Robert Pluim
  2022-02-01 18:30                   ` Saulius Menkevicius
  2022-03-04  8:38                   ` [PATCH] posix_spawn blocks SIGCHLD in spawned processes (was: Re: master 2c79a8f 2/2: Use posix_spawn if possible.) Jürgen Hötzel
  0 siblings, 2 replies; 39+ messages in thread
From: Robert Pluim @ 2022-02-01  9:59 UTC (permalink / raw)
  To: Saulius Menkevicius
  Cc: alan, emacs-devel, p.stephani2, Matt Armstrong, Eli Zaretskii,
	mituharu

>>>>> On Mon, 31 Jan 2022 22:48:33 +0200, Saulius Menkevicius <sauliusmenkevicius@fastmail.com> said:

    Saulius> I did a bit more investigation (and still don't have a reproduction
    Saulius> vehicle) but it seems the problem has to do with signals (SIGCHLD in
    Saulius> particular) rather than stdio redirection.

    Saulius> Stack trace in the child process shows it has launched a subprocess
    Saulius> which has since exited but the child did not receive (?) SIGCHLD and
    Saulius> appears to be blocked.

    Saulius> Dotnet stack trace is

    Saulius> |[bob@fedora emacs]$ dotnet stack report -p 53193 Thread (0xCFC9):
    Saulius>  [Native Frames]
    Saulius>  System.Private.CoreLib!System.Threading.WaitHandle.WaitOneNoCheck(int32)
    Saulius>  System.Private.CoreLib!System.Threading.WaitHandle.WaitOne(int32)
    Saulius>  System.Diagnostics.Process!System.Diagnostics.ProcessWaitState.WaitForExit(int32)
    Saulius>  System.Diagnostics.Process!System.Diagnostics.Process.WaitForExitCore(int32)
    Saulius>  Microsoft.Build.Locator!Microsoft.Build.Locator.DotNetSdkLocationHelper+<GetDotNetBasePaths>d__5.MoveNext()
    Saulius>  Microsoft.Build.Locator!Microsoft.Build.Locator.DotNetSdkLocationHelper+<GetInstances>d__4.MoveNext()
    Saulius>  Microsoft.Build.Locator!Microsoft.Build.Locator.MSBuildLocator+<GetInstances>d__20.MoveNext()
    Saulius>  System.Linq!System.Linq.Enumerable.TryGetFirst(class
    Saulius>  System.Collections.Generic.IEnumerable`1<!!0>,bool&)
    Saulius>  System.Linq!System.Linq.Enumerable.FirstOrDefault(class
    Saulius>  System.Collections.Generic.IEnumerable`1<!!0>)
    Saulius>  Microsoft.Build.Locator!Microsoft.Build.Locator.MSBuildLocator.RegisterDefaults()
    Saulius>  CSharpLanguageServer!CSharpLanguageServer.Program.entry(class
    Saulius>  System.String[]) |

    Saulius> Where "ps axl" shows there is a zombie process waiting to be collected
    Saulius> but is not.

    Saulius> |0 1000 53193 53129 20 0 3437284 59416 - Ssl ? 0:00
    Saulius>  /home/bob/src/csharp-language-server/src/CSharpLanguageServer/bin/Debug/net6.0/CSharpLanguageServer
    Saulius>  0 1000 53203 53193 20 0 0 0 - Z ? 0:00 [dotnet] <defunct> |


    Saulius> Related emacs src/callproc.cs has code that has this comment:

    Saulius> /* Stop blocking SIGCHLD in the child.  */

    Saulius> But I really don't know what should I do to attempt to fix this/find
    Saulius> the cause.

Despite the comment, that code doesnʼt actually unblock SIGCHLD, it
just sets the child mask to be the same as the parent, and SIGCHLD and
SIGINT are blocked in the parent at this point.

Try the following:

diff --git a/src/callproc.c b/src/callproc.c
index 4d3b0bb8e0..2b4e8977a3 100644
--- a/src/callproc.c
+++ b/src/callproc.c
@@ -1378,6 +1378,12 @@ emacs_posix_spawn_init_attributes (posix_spawnattr_t *attributes)
   /* Stop blocking SIGCHLD in the child.  */
   sigset_t oldset;
   error = pthread_sigmask (SIG_SETMASK, NULL, &oldset);
+  if (error != 0)
+    goto out;
+  error = sigdelset (&oldset, SIGCHLD);
+  if (error != 0)
+    goto out;
+  error = sigdelset (&oldset, SIGINT);
   if (error != 0)
     goto out;
   error = posix_spawnattr_setsigmask (attributes, &oldset);



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

* Re: master 2c79a8f 2/2: Use posix_spawn if possible.
  2022-02-01  9:59                 ` Robert Pluim
@ 2022-02-01 18:30                   ` Saulius Menkevicius
  2022-02-01 19:23                     ` Robert Pluim
  2022-03-04  8:38                   ` [PATCH] posix_spawn blocks SIGCHLD in spawned processes (was: Re: master 2c79a8f 2/2: Use posix_spawn if possible.) Jürgen Hötzel
  1 sibling, 1 reply; 39+ messages in thread
From: Saulius Menkevicius @ 2022-02-01 18:30 UTC (permalink / raw)
  To: Robert Pluim
  Cc: alan, emacs-devel, p.stephani2, Matt Armstrong, Eli Zaretskii,
	mituharu

Thanks Robert!

I applied your patch and that has actually has fixed the issue. So I 
suggest this patch be applied on master.

-Saulius

Am 01.02.22 um 11:59 schrieb Robert Pluim:
>>>>>> On Mon, 31 Jan 2022 22:48:33 +0200, Saulius Menkevicius <sauliusmenkevicius@fastmail.com> said:
>      Saulius> I did a bit more investigation (and still don't have a reproduction
>      Saulius> vehicle) but it seems the problem has to do with signals (SIGCHLD in
>      Saulius> particular) rather than stdio redirection.
>
>      Saulius> Stack trace in the child process shows it has launched a subprocess
>      Saulius> which has since exited but the child did not receive (?) SIGCHLD and
>      Saulius> appears to be blocked.
>
>      Saulius> Dotnet stack trace is
>
>      Saulius> |[bob@fedora emacs]$ dotnet stack report -p 53193 Thread (0xCFC9):
>      Saulius>  [Native Frames]
>      Saulius>  System.Private.CoreLib!System.Threading.WaitHandle.WaitOneNoCheck(int32)
>      Saulius>  System.Private.CoreLib!System.Threading.WaitHandle.WaitOne(int32)
>      Saulius>  System.Diagnostics.Process!System.Diagnostics.ProcessWaitState.WaitForExit(int32)
>      Saulius>  System.Diagnostics.Process!System.Diagnostics.Process.WaitForExitCore(int32)
>      Saulius>  Microsoft.Build.Locator!Microsoft.Build.Locator.DotNetSdkLocationHelper+<GetDotNetBasePaths>d__5.MoveNext()
>      Saulius>  Microsoft.Build.Locator!Microsoft.Build.Locator.DotNetSdkLocationHelper+<GetInstances>d__4.MoveNext()
>      Saulius>  Microsoft.Build.Locator!Microsoft.Build.Locator.MSBuildLocator+<GetInstances>d__20.MoveNext()
>      Saulius>  System.Linq!System.Linq.Enumerable.TryGetFirst(class
>      Saulius>  System.Collections.Generic.IEnumerable`1<!!0>,bool&)
>      Saulius>  System.Linq!System.Linq.Enumerable.FirstOrDefault(class
>      Saulius>  System.Collections.Generic.IEnumerable`1<!!0>)
>      Saulius>  Microsoft.Build.Locator!Microsoft.Build.Locator.MSBuildLocator.RegisterDefaults()
>      Saulius>  CSharpLanguageServer!CSharpLanguageServer.Program.entry(class
>      Saulius>  System.String[]) |
>
>      Saulius> Where "ps axl" shows there is a zombie process waiting to be collected
>      Saulius> but is not.
>
>      Saulius> |0 1000 53193 53129 20 0 3437284 59416 - Ssl ? 0:00
>      Saulius>  /home/bob/src/csharp-language-server/src/CSharpLanguageServer/bin/Debug/net6.0/CSharpLanguageServer
>      Saulius>  0 1000 53203 53193 20 0 0 0 - Z ? 0:00 [dotnet] <defunct> |
>
>
>      Saulius> Related emacs src/callproc.cs has code that has this comment:
>
>      Saulius> /* Stop blocking SIGCHLD in the child.  */
>
>      Saulius> But I really don't know what should I do to attempt to fix this/find
>      Saulius> the cause.
>
> Despite the comment, that code doesnʼt actually unblock SIGCHLD, it
> just sets the child mask to be the same as the parent, and SIGCHLD and
> SIGINT are blocked in the parent at this point.
>
> Try the following:
>
> diff --git a/src/callproc.c b/src/callproc.c
> index 4d3b0bb8e0..2b4e8977a3 100644
> --- a/src/callproc.c
> +++ b/src/callproc.c
> @@ -1378,6 +1378,12 @@ emacs_posix_spawn_init_attributes (posix_spawnattr_t *attributes)
>     /* Stop blocking SIGCHLD in the child.  */
>     sigset_t oldset;
>     error = pthread_sigmask (SIG_SETMASK, NULL, &oldset);
> +  if (error != 0)
> +    goto out;
> +  error = sigdelset (&oldset, SIGCHLD);
> +  if (error != 0)
> +    goto out;
> +  error = sigdelset (&oldset, SIGINT);
>     if (error != 0)
>       goto out;
>     error = posix_spawnattr_setsigmask (attributes, &oldset);



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

* Re: master 2c79a8f 2/2: Use posix_spawn if possible.
  2022-02-01 18:30                   ` Saulius Menkevicius
@ 2022-02-01 19:23                     ` Robert Pluim
  2022-02-01 19:52                       ` Eli Zaretskii
  0 siblings, 1 reply; 39+ messages in thread
From: Robert Pluim @ 2022-02-01 19:23 UTC (permalink / raw)
  To: Saulius Menkevicius
  Cc: alan, emacs-devel, p.stephani2, Matt Armstrong, Eli Zaretskii,
	mituharu

>>>>> On Tue, 1 Feb 2022 20:30:18 +0200, Saulius Menkevicius <sauliusmenkevicius@fastmail.com> said:

    Saulius> Thanks Robert!
    Saulius> I applied your patch and that has actually has fixed the issue. So I
    Saulius> suggest this patch be applied on master.

I can do that, if Eli/Lars agree. What should we do for emacs-28?
Apply it there or switch back to fork/vfork?

Robert
-- 



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

* Re: master 2c79a8f 2/2: Use posix_spawn if possible.
  2022-02-01 19:23                     ` Robert Pluim
@ 2022-02-01 19:52                       ` Eli Zaretskii
  2022-02-02  8:30                         ` Robert Pluim
  0 siblings, 1 reply; 39+ messages in thread
From: Eli Zaretskii @ 2022-02-01 19:52 UTC (permalink / raw)
  To: Robert Pluim
  Cc: alan, emacs-devel, sauliusmenkevicius, p.stephani2, matt,
	mituharu

> From: Robert Pluim <rpluim@gmail.com>
> Cc: Eli Zaretskii <eliz@gnu.org>,  Matt Armstrong <matt@rfc20.org>,
>   p.stephani2@gmail.com,  alan@idiocy.org,  mituharu@math.s.chiba-u.ac.jp,
>   emacs-devel@gnu.org
> Date: Tue, 01 Feb 2022 20:23:23 +0100
> 
> >>>>> On Tue, 1 Feb 2022 20:30:18 +0200, Saulius Menkevicius <sauliusmenkevicius@fastmail.com> said:
> 
>     Saulius> Thanks Robert!
>     Saulius> I applied your patch and that has actually has fixed the issue. So I
>     Saulius> suggest this patch be applied on master.
> 
> I can do that, if Eli/Lars agree.

Are there any downsides to the patch?  If not, I see no reasons not to
install that.

> What should we do for emacs-28?

Nothing, because on emacs-28 we use posix_spawn only on macOS.



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

* Re: master 2c79a8f 2/2: Use posix_spawn if possible.
  2022-02-01 19:52                       ` Eli Zaretskii
@ 2022-02-02  8:30                         ` Robert Pluim
  2022-02-02  8:54                           ` Saulius Menkevičius
  0 siblings, 1 reply; 39+ messages in thread
From: Robert Pluim @ 2022-02-02  8:30 UTC (permalink / raw)
  To: Eli Zaretskii
  Cc: alan, emacs-devel, sauliusmenkevicius, p.stephani2, matt,
	mituharu

>>>>> On Tue, 01 Feb 2022 21:52:18 +0200, Eli Zaretskii <eliz@gnu.org> said:

    >> From: Robert Pluim <rpluim@gmail.com>
    >> Cc: Eli Zaretskii <eliz@gnu.org>,  Matt Armstrong <matt@rfc20.org>,
    >> p.stephani2@gmail.com,  alan@idiocy.org,  mituharu@math.s.chiba-u.ac.jp,
    >> emacs-devel@gnu.org
    >> Date: Tue, 01 Feb 2022 20:23:23 +0100
    >> 
    >> >>>>> On Tue, 1 Feb 2022 20:30:18 +0200, Saulius Menkevicius <sauliusmenkevicius@fastmail.com> said:
    >> 
    Saulius> Thanks Robert!
    Saulius> I applied your patch and that has actually has fixed the issue. So I
    Saulius> suggest this patch be applied on master.
    >> 
    >> I can do that, if Eli/Lars agree.

    Eli> Are there any downsides to the patch?  If not, I see no reasons not to
    Eli> install that.

Not as far as I can tell, but I shall test on a few more platforms
before pushing.

    >> What should we do for emacs-28?

    Eli> Nothing, because on emacs-28 we use posix_spawn only on macOS.

Right, Iʼd missed that, master it is then. We could put it in 28.2, I
guess, but I hadn't noticed any issues with subprocesses on emacs-28
on macOS.

Robert
-- 



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

* Re: master 2c79a8f 2/2: Use posix_spawn if possible.
  2022-02-02  8:30                         ` Robert Pluim
@ 2022-02-02  8:54                           ` Saulius Menkevičius
  2022-02-07 21:12                             ` Saulius Menkevicius
  0 siblings, 1 reply; 39+ messages in thread
From: Saulius Menkevičius @ 2022-02-02  8:54 UTC (permalink / raw)
  To: Robert Pluim
  Cc: alan, emacs-devel, p.stephani2, matt, Eli Zaretskii, mituharu

I’ve just received a new Mac (arm64/M1) for myself so I can test if 28 has it broken on macOS too.

—Saulius Menkevičius

> Am 2022-02-02 um 10:30 schrieb Robert Pluim <rpluim@gmail.com>:
> 
> 
>> 
>>>>>> On Tue, 01 Feb 2022 21:52:18 +0200, Eli Zaretskii <eliz@gnu.org> said:
> 
>>> From: Robert Pluim <rpluim@gmail.com>
>>> Cc: Eli Zaretskii <eliz@gnu.org>,  Matt Armstrong <matt@rfc20.org>,
>>> p.stephani2@gmail.com,  alan@idiocy.org,  mituharu@math.s.chiba-u.ac.jp,
>>> emacs-devel@gnu.org
>>> Date: Tue, 01 Feb 2022 20:23:23 +0100
>>> 
>>>>>>>> On Tue, 1 Feb 2022 20:30:18 +0200, Saulius Menkevicius <sauliusmenkevicius@fastmail.com> said:
>>> 
>    Saulius> Thanks Robert!
>    Saulius> I applied your patch and that has actually has fixed the issue. So I
>    Saulius> suggest this patch be applied on master.
>>> 
>>> I can do that, if Eli/Lars agree.
> 
>    Eli> Are there any downsides to the patch?  If not, I see no reasons not to
>    Eli> install that.
> 
> Not as far as I can tell, but I shall test on a few more platforms
> before pushing.
> 
>>> What should we do for emacs-28?
> 
>    Eli> Nothing, because on emacs-28 we use posix_spawn only on macOS.
> 
> Right, Iʼd missed that, master it is then. We could put it in 28.2, I
> guess, but I hadn't noticed any issues with subprocesses on emacs-28
> on macOS.
> 
> Robert
> -- 




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

* Re: master 2c79a8f 2/2: Use posix_spawn if possible.
  2022-02-02  8:54                           ` Saulius Menkevičius
@ 2022-02-07 21:12                             ` Saulius Menkevicius
  2022-02-08  8:27                               ` Robert Pluim
  2022-02-08 12:12                               ` Eli Zaretskii
  0 siblings, 2 replies; 39+ messages in thread
From: Saulius Menkevicius @ 2022-02-07 21:12 UTC (permalink / raw)
  To: Robert Pluim
  Cc: Alan Third, emacs-devel, p.stephani2, Matt Armstrong,
	Eli Zaretskii, mituharu

Hello Robert, Eli,

I can confirm that this patch is needed for emacs-28 too, as currently emacs on macOS blocks SIGCHLD the same way as it does on Linux.

Applying Robert’s patch on emacs-28 fixes the issue on macOS.

Tested on macOS 12.2 / aarch64.

-Saulius

> Am 2022-02-02 um 10:54 schrieb Saulius Menkevičius <sauliusmenkevicius@fastmail.com>:
> 
> I’ve just received a new Mac (arm64/M1) for myself so I can test if 28 has it broken on macOS too.
> 
> —Saulius Menkevičius
> 
>> Am 2022-02-02 um 10:30 schrieb Robert Pluim <rpluim@gmail.com>:
>> 
>> 
>>> 
>>>>>>> On Tue, 01 Feb 2022 21:52:18 +0200, Eli Zaretskii <eliz@gnu.org> said:
>> 
>>>> From: Robert Pluim <rpluim@gmail.com>
>>>> Cc: Eli Zaretskii <eliz@gnu.org>,  Matt Armstrong <matt@rfc20.org>,
>>>> p.stephani2@gmail.com,  alan@idiocy.org,  mituharu@math.s.chiba-u.ac.jp,
>>>> emacs-devel@gnu.org
>>>> Date: Tue, 01 Feb 2022 20:23:23 +0100
>>>> 
>>>>>>>>> On Tue, 1 Feb 2022 20:30:18 +0200, Saulius Menkevicius <sauliusmenkevicius@fastmail.com> said:
>>>> 
>>   Saulius> Thanks Robert!
>>   Saulius> I applied your patch and that has actually has fixed the issue. So I
>>   Saulius> suggest this patch be applied on master.
>>>> 
>>>> I can do that, if Eli/Lars agree.
>> 
>>   Eli> Are there any downsides to the patch?  If not, I see no reasons not to
>>   Eli> install that.
>> 
>> Not as far as I can tell, but I shall test on a few more platforms
>> before pushing.
>> 
>>>> What should we do for emacs-28?
>> 
>>   Eli> Nothing, because on emacs-28 we use posix_spawn only on macOS.
>> 
>> Right, Iʼd missed that, master it is then. We could put it in 28.2, I
>> guess, but I hadn't noticed any issues with subprocesses on emacs-28
>> on macOS.
>> 
>> Robert
>> -- 




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

* Re: master 2c79a8f 2/2: Use posix_spawn if possible.
  2022-02-07 21:12                             ` Saulius Menkevicius
@ 2022-02-08  8:27                               ` Robert Pluim
  2022-02-08 12:12                               ` Eli Zaretskii
  1 sibling, 0 replies; 39+ messages in thread
From: Robert Pluim @ 2022-02-08  8:27 UTC (permalink / raw)
  To: Saulius Menkevicius
  Cc: Alan Third, emacs-devel, p.stephani2, Matt Armstrong,
	Eli Zaretskii, mituharu

>>>>> On Mon, 7 Feb 2022 23:12:27 +0200, Saulius Menkevicius <sauliusmenkevicius@fastmail.com> said:

    Saulius> Hello Robert, Eli,
    Saulius> I can confirm that this patch is needed for emacs-28 too, as currently
    Saulius> emacs on macOS blocks SIGCHLD the same way as it does on Linux.

    Saulius> Applying Robert’s patch on emacs-28 fixes the issue on macOS.

    Saulius> Tested on macOS 12.2 / aarch64.

OK. I haven't found any problems with it so far. Eli, where do you
want me to push it? (I could argue itʼs a regression, since emacs-27
used fork/vfork on macOS, and thus didnʼt have this issue).

Robert
-- 



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

* Re: master 2c79a8f 2/2: Use posix_spawn if possible.
  2022-02-07 21:12                             ` Saulius Menkevicius
  2022-02-08  8:27                               ` Robert Pluim
@ 2022-02-08 12:12                               ` Eli Zaretskii
  2022-02-08 12:18                                 ` Saulius Menkevicius
  1 sibling, 1 reply; 39+ messages in thread
From: Eli Zaretskii @ 2022-02-08 12:12 UTC (permalink / raw)
  To: Saulius Menkevicius
  Cc: alan, rpluim, emacs-devel, p.stephani2, matt, mituharu

> From: Saulius Menkevicius <sauliusmenkevicius@fastmail.com>
> Date: Mon, 7 Feb 2022 23:12:27 +0200
> Cc: Alan Third <alan@idiocy.org>, emacs-devel@gnu.org, p.stephani2@gmail.com,
>  Matt Armstrong <matt@rfc20.org>, Eli Zaretskii <eliz@gnu.org>,
>  mituharu@math.s.chiba-u.ac.jp
> 
> Hello Robert, Eli,
> 
> I can confirm that this patch is needed for emacs-28 too, as currently emacs on macOS blocks SIGCHLD the same way as it does on Linux.
> 
> Applying Robert’s patch on emacs-28 fixes the issue on macOS.

How important is this on macOS?  I _really_ don't want to start
experiments with signals on the release branch, I prefer to tell users
C# is broken on macOS unless they either build without posix_spawn or
use the master branch.



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

* Re: master 2c79a8f 2/2: Use posix_spawn if possible.
  2022-02-08 12:12                               ` Eli Zaretskii
@ 2022-02-08 12:18                                 ` Saulius Menkevicius
  2022-02-08 14:59                                   ` Robert Pluim
  0 siblings, 1 reply; 39+ messages in thread
From: Saulius Menkevicius @ 2022-02-08 12:18 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: alan, rpluim, emacs-devel, p.stephani2, matt, mituharu

I believe this is not a problem related to C#/dotnet but generally with 
how signals are blocked on child processes launched with posix_spawn in 
the current implementation.

I will try to provide a minimal replication code that does not have 
anything to do with dotnet/C#.

-Saulius

Am 08.02.22 um 14:12 schrieb Eli Zaretskii:
>> From: Saulius Menkevicius <sauliusmenkevicius@fastmail.com>
>> Date: Mon, 7 Feb 2022 23:12:27 +0200
>> Cc: Alan Third <alan@idiocy.org>, emacs-devel@gnu.org, p.stephani2@gmail.com,
>>   Matt Armstrong <matt@rfc20.org>, Eli Zaretskii <eliz@gnu.org>,
>>   mituharu@math.s.chiba-u.ac.jp
>>
>> Hello Robert, Eli,
>>
>> I can confirm that this patch is needed for emacs-28 too, as currently emacs on macOS blocks SIGCHLD the same way as it does on Linux.
>>
>> Applying Robert’s patch on emacs-28 fixes the issue on macOS.
> How important is this on macOS?  I _really_ don't want to start
> experiments with signals on the release branch, I prefer to tell users
> C# is broken on macOS unless they either build without posix_spawn or
> use the master branch.



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

* Re: master 2c79a8f 2/2: Use posix_spawn if possible.
  2022-02-08 12:18                                 ` Saulius Menkevicius
@ 2022-02-08 14:59                                   ` Robert Pluim
  2022-02-08 21:09                                     ` Saulius Menkevicius
  0 siblings, 1 reply; 39+ messages in thread
From: Robert Pluim @ 2022-02-08 14:59 UTC (permalink / raw)
  To: Saulius Menkevicius
  Cc: alan, emacs-devel, p.stephani2, matt, Eli Zaretskii, mituharu

>>>>> On Tue, 8 Feb 2022 14:18:43 +0200, Saulius Menkevicius <sauliusmenkevicius@fastmail.com> said:

    Saulius> I believe this is not a problem related to C#/dotnet but generally
    Saulius> with how signals are blocked on child processes launched with
    Saulius> posix_spawn in the current implementation.

(I could argue that if dotnet wants to ensure it receives SIGCHLD, it
should unblock it itself, but thatʼs a different discussion, we
definitely have an Emacs bug)

And come to think of it, the posix_spawn code path is only exercised
when not asking for a pseudo tty. Since the default value for
`process-connection-type' is t => pty, Iʼm assuming that the elisp
code in question is binding that to nil, or using the :connection-type
argument to `make-process'.

Would it be possible to test using ptys? If that works thatʼs a
workaround that requires no changes to emacs-28.

Thanks

Robert
-- 



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

* Re: master 2c79a8f 2/2: Use posix_spawn if possible.
  2022-02-08 14:59                                   ` Robert Pluim
@ 2022-02-08 21:09                                     ` Saulius Menkevicius
  2022-02-09  8:48                                       ` Robert Pluim
  0 siblings, 1 reply; 39+ messages in thread
From: Saulius Menkevicius @ 2022-02-08 21:09 UTC (permalink / raw)
  To: Robert Pluim
  Cc: Alan Third, Emacs developers, p.stephani2, Matt Armstrong,
	Eli Zaretskii, mituharu

[-- Attachment #1: Type: text/plain, Size: 1705 bytes --]

Robert you are correct about ``:connection-type''. In particular lsp-mode specifies ``:connection-type pty'' here:

- https://github.com/emacs-lsp/lsp-mode/blob/master/lsp-mode.el#L6932 <https://github.com/emacs-lsp/lsp-mode/blob/master/lsp-mode.el#L6932>

As a workaround fsharp/csharp language servers can use shell wrapper for launching the server binaries, as "#!/bin/bash" will apparently normalize signal mask before launching sub-subprocess and things work alright from thereon.

This is not as nice as having things just working before this change to `make-process`, but at least we have some way to work around this issue..

-Saulius

> Am 2022-02-08 um 16:59 schrieb Robert Pluim <rpluim@gmail.com>:
> 
>>>>>> On Tue, 8 Feb 2022 14:18:43 +0200, Saulius Menkevicius <sauliusmenkevicius@fastmail.com> said:
> 
>    Saulius> I believe this is not a problem related to C#/dotnet but generally
>    Saulius> with how signals are blocked on child processes launched with
>    Saulius> posix_spawn in the current implementation.
> 
> (I could argue that if dotnet wants to ensure it receives SIGCHLD, it
> should unblock it itself, but thatʼs a different discussion, we
> definitely have an Emacs bug)
> 
> And come to think of it, the posix_spawn code path is only exercised
> when not asking for a pseudo tty. Since the default value for
> `process-connection-type' is t => pty, Iʼm assuming that the elisp
> code in question is binding that to nil, or using the :connection-type
> argument to `make-process'.
> 
> Would it be possible to test using ptys? If that works thatʼs a
> workaround that requires no changes to emacs-28.
> 
> Thanks
> 
> Robert
> -- 


[-- Attachment #2: Type: text/html, Size: 2885 bytes --]

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

* Re: master 2c79a8f 2/2: Use posix_spawn if possible.
  2022-02-08 21:09                                     ` Saulius Menkevicius
@ 2022-02-09  8:48                                       ` Robert Pluim
  2022-02-12  8:44                                         ` Saulius Menkevicius
  0 siblings, 1 reply; 39+ messages in thread
From: Robert Pluim @ 2022-02-09  8:48 UTC (permalink / raw)
  To: Saulius Menkevicius
  Cc: Alan Third, Emacs developers, p.stephani2, Matt Armstrong,
	Eli Zaretskii, mituharu

>>>>> On Tue, 8 Feb 2022 23:09:20 +0200, Saulius Menkevicius <sauliusmenkevicius@fastmail.com> said:

    Saulius> Robert you are correct about ``:connection-type''. In particular
    Saulius> lsp-mode specifies ``:connection-type pty'' here:

':connection-type pipe', you mean. Does it still work if you use
'pty'?

    Saulius> - https://github.com/emacs-lsp/lsp-mode/blob/master/lsp-mode.el#L6932
    Saulius> <https://github.com/emacs-lsp/lsp-mode/blob/master/lsp-mode.el#L6932>

    Saulius> As a workaround fsharp/csharp language servers can use shell wrapper
    Saulius> for launching the server binaries, as "#!/bin/bash" will apparently
    Saulius> normalize signal mask before launching sub-subprocess and things work
    Saulius> alright from thereon.

Thatʼs to be expected. bash is a caring parent :-)

    Saulius> This is not as nice as having things just working before this change
    Saulius> to `make-process`, but at least we have some way to work around this
    Saulius> issue..

OK. In that case Iʼll put it only in master.

Robert
-- 



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

* Re: master 2c79a8f 2/2: Use posix_spawn if possible.
  2022-02-09  8:48                                       ` Robert Pluim
@ 2022-02-12  8:44                                         ` Saulius Menkevicius
  2022-02-12  8:59                                           ` Eli Zaretskii
  0 siblings, 1 reply; 39+ messages in thread
From: Saulius Menkevicius @ 2022-02-12  8:44 UTC (permalink / raw)
  To: Robert Pluim
  Cc: Alan Third, Emacs developers, p.stephani2, Matt Armstrong,
	Eli Zaretskii, mituharu

[-- Attachment #1: Type: text/plain, Size: 2227 bytes --]

Correct, I meant ":connection-type pipe“ when I referred to lsp-mode. My mistake. Curiously setting :connect-type to ’pty does not fix my issues on macOS+emacs-28 for me. I might be doing something wrong though.. Applying Robert’s patch does fix it on emacs-28 too.

And I was mistaken about /bin/bash reseting signal mask, ksh does it though.. https://unix.stackexchange.com/questions/123768/calling-sigprocmask-from-bash <https://unix.stackexchange.com/questions/123768/calling-sigprocmask-from-bash>.

So my workarounds to fix sigmask are as follows:
- on linux, I will wrap invocation of server process with „/usr/bin/env --default-signal“
- on macos, I will wrap invocation of server process with „/bin/ksh -c“
- .. not sure what is needed on *BSDs, probably the same thing as on macOS if they have /bin/ksh in default installation?

Are there any chances of getting this patch to fix signal mask to default after posix_spawn from Robert getting merged to master and/or emacs-28?

-Saulius


> Am 2022-02-09 um 10:48 schrieb Robert Pluim <rpluim@gmail.com>:
> 
>>>>>> On Tue, 8 Feb 2022 23:09:20 +0200, Saulius Menkevicius <sauliusmenkevicius@fastmail.com> said:
> 
>    Saulius> Robert you are correct about ``:connection-type''. In particular
>    Saulius> lsp-mode specifies ``:connection-type pty'' here:
> 
> ':connection-type pipe', you mean. Does it still work if you use
> 'pty'?
> 
>    Saulius> - https://github.com/emacs-lsp/lsp-mode/blob/master/lsp-mode.el#L6932
>    Saulius> <https://github.com/emacs-lsp/lsp-mode/blob/master/lsp-mode.el#L6932>
> 
>    Saulius> As a workaround fsharp/csharp language servers can use shell wrapper
>    Saulius> for launching the server binaries, as "#!/bin/bash" will apparently
>    Saulius> normalize signal mask before launching sub-subprocess and things work
>    Saulius> alright from thereon.
> 
> Thatʼs to be expected. bash is a caring parent :-)
> 
>    Saulius> This is not as nice as having things just working before this change
>    Saulius> to `make-process`, but at least we have some way to work around this
>    Saulius> issue..
> 
> OK. In that case Iʼll put it only in master.
> 
> Robert
> -- 


[-- Attachment #2: Type: text/html, Size: 3901 bytes --]

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

* Re: master 2c79a8f 2/2: Use posix_spawn if possible.
  2022-02-12  8:44                                         ` Saulius Menkevicius
@ 2022-02-12  8:59                                           ` Eli Zaretskii
  2022-02-12  9:42                                             ` Saulius Menkevicius
  0 siblings, 1 reply; 39+ messages in thread
From: Eli Zaretskii @ 2022-02-12  8:59 UTC (permalink / raw)
  To: Saulius Menkevicius
  Cc: alan, rpluim, emacs-devel, p.stephani2, matt, mituharu

> From: Saulius Menkevicius <sauliusmenkevicius@fastmail.com>
> Date: Sat, 12 Feb 2022 10:44:21 +0200
> Cc: Eli Zaretskii <eliz@gnu.org>,
>  Alan Third <alan@idiocy.org>,
>  Emacs developers <emacs-devel@gnu.org>,
>  p.stephani2@gmail.com,
>  Matt Armstrong <matt@rfc20.org>,
>  mituharu@math.s.chiba-u.ac.jp
> 
> Are there any chances of getting this patch to fix signal mask to default after posix_spawn from Robert
> getting merged to master and/or emacs-28?

From my POV, it's too late to make such changes on the emacs-28
branch.  We are too close to a release.



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

* Re: master 2c79a8f 2/2: Use posix_spawn if possible.
  2022-02-12  8:59                                           ` Eli Zaretskii
@ 2022-02-12  9:42                                             ` Saulius Menkevicius
  0 siblings, 0 replies; 39+ messages in thread
From: Saulius Menkevicius @ 2022-02-12  9:42 UTC (permalink / raw)
  To: Eli Zaretskii
  Cc: Alan Third, Robert Pluim, Emacs developers, p.stephani2,
	Matt Armstrong, mituharu

Very understandable.

OK, will proceed to apply workarounds in lsp-mode.

> Am 2022-02-12 um 10:59 schrieb Eli Zaretskii <eliz@gnu.org>:
> 
>> From: Saulius Menkevicius <sauliusmenkevicius@fastmail.com>
>> Date: Sat, 12 Feb 2022 10:44:21 +0200
>> Cc: Eli Zaretskii <eliz@gnu.org>,
>> Alan Third <alan@idiocy.org>,
>> Emacs developers <emacs-devel@gnu.org>,
>> p.stephani2@gmail.com,
>> Matt Armstrong <matt@rfc20.org>,
>> mituharu@math.s.chiba-u.ac.jp
>> 
>> Are there any chances of getting this patch to fix signal mask to default after posix_spawn from Robert
>> getting merged to master and/or emacs-28?
> 
> From my POV, it's too late to make such changes on the emacs-28
> branch.  We are too close to a release.




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

* [PATCH] posix_spawn blocks SIGCHLD in spawned processes (was: Re: master 2c79a8f 2/2: Use posix_spawn if possible.)
  2022-02-01  9:59                 ` Robert Pluim
  2022-02-01 18:30                   ` Saulius Menkevicius
@ 2022-03-04  8:38                   ` Jürgen Hötzel
  2022-03-04 10:07                     ` [PATCH] posix_spawn blocks SIGCHLD in spawned processes Robert Pluim
  1 sibling, 1 reply; 39+ messages in thread
From: Jürgen Hötzel @ 2022-03-04  8:38 UTC (permalink / raw)
  To: Robert Pluim
  Cc: alan, emacs-devel, Saulius Menkevicius, p.stephani2,
	Matt Armstrong, Eli Zaretskii, mituharu

[-- Attachment #1: Type: text/plain, Size: 1305 bytes --]


Robert Pluim <rpluim@gmail.com> writes:

>>>>>> On Mon, 31 Jan 2022 22:48:33 +0200, Saulius Menkevicius <sauliusmenkevicius@fastmail.com> said:

> Try the following:
>
> diff --git a/src/callproc.c b/src/callproc.c
> index 4d3b0bb8e0..2b4e8977a3 100644
> --- a/src/callproc.c
> +++ b/src/callproc.c
> @@ -1378,6 +1378,12 @@ emacs_posix_spawn_init_attributes (posix_spawnattr_t *attributes)
>    /* Stop blocking SIGCHLD in the child.  */
>    sigset_t oldset;

^^^ This is the root-cause of the issue:
A new/invalid signal mask is introduced.
The correct oldset mask from emacs_spawn(...,const sigset_t *oldset) is
simply ignored.

>    error = pthread_sigmask (SIG_SETMASK, NULL, &oldset);
> +  if (error != 0)
> +    goto out;
> +  error = sigdelset (&oldset, SIGCHLD);
> +  if (error != 0)
> +    goto out;
> +  error = sigdelset (&oldset, SIGINT);
>    if (error != 0)
>      goto out;
>    error = posix_spawnattr_setsigmask (attributes, &oldset);
IMO the correct way to fix this issue is to use the oldset passed by
emacs_spawn (patch enclosed) just like the fork/exec implementation does.

I guess without a fix many forking commands (that don't examine and
change mask of blocked signals) will "hang" in Emacs.

"dotnet" is just a prominent one.

Jürgen


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: [PATCH] Use correct signal oldset in posix_spawn implementation --]
[-- Type: text/x-patch, Size: 2748 bytes --]

From f691f4c304d226f99ac0377de3b6186154c0d8fd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=BCrgen=20H=C3=B6tzel?= <juergen@archlinux.org>
Date: Fri, 4 Mar 2022 10:08:14 +0100
Subject: [PATCH] Use correct signal oldset in posix_spawn implementation

* src/callproc.c (emacs_spawn): Pass oldset parameter.
(emacs_posix_spawn_init_attributes): Use correct oldset.
(emacs_posix_spawn_init): remove intermediate function.
---
 src/callproc.c | 35 +++++++++--------------------------
 1 file changed, 9 insertions(+), 26 deletions(-)

diff --git a/src/callproc.c b/src/callproc.c
index 018c9ce690..0922e10f01 100644
--- a/src/callproc.c
+++ b/src/callproc.c
@@ -1335,7 +1335,8 @@ emacs_posix_spawn_init_actions (posix_spawn_file_actions_t *actions,
 }
 
 static int
-emacs_posix_spawn_init_attributes (posix_spawnattr_t *attributes)
+emacs_posix_spawn_init_attributes (posix_spawnattr_t *attributes,
+				   const sigset_t *oldset)
 {
   int error = posix_spawnattr_init (attributes);
   if (error != 0)
@@ -1377,11 +1378,7 @@ emacs_posix_spawn_init_attributes (posix_spawnattr_t *attributes)
     goto out;
 
   /* Stop blocking SIGCHLD in the child.  */
-  sigset_t oldset;
-  error = pthread_sigmask (SIG_SETMASK, NULL, &oldset);
-  if (error != 0)
-    goto out;
-  error = posix_spawnattr_setsigmask (attributes, &oldset);
+  error = posix_spawnattr_setsigmask (attributes, oldset);
   if (error != 0)
     goto out;
 
@@ -1392,23 +1389,6 @@ emacs_posix_spawn_init_attributes (posix_spawnattr_t *attributes)
   return error;
 }
 
-static int
-emacs_posix_spawn_init (posix_spawn_file_actions_t *actions,
-                        posix_spawnattr_t *attributes, int std_in,
-                        int std_out, int std_err, const char *cwd)
-{
-  int error = emacs_posix_spawn_init_actions (actions, std_in,
-                                              std_out, std_err, cwd);
-  if (error != 0)
-    return error;
-
-  error = emacs_posix_spawn_init_attributes (attributes);
-  if (error != 0)
-    return error;
-
-  return 0;
-}
-
 #endif
 
 /* Start a new asynchronous subprocess.  If successful, return zero
@@ -1443,9 +1423,12 @@ emacs_spawn (pid_t *newpid, int std_in, int std_out, int std_err,
   if (use_posix_spawn)
     {
       /* Initialize optional attributes before blocking. */
-      int error
-        = emacs_posix_spawn_init (&actions, &attributes, std_in,
-                                  std_out, std_err, cwd);
+      int error = emacs_posix_spawn_init_actions (&actions, std_in,
+                                              std_out, std_err, cwd);
+      if (error != 0)
+	return error;
+
+      error = emacs_posix_spawn_init_attributes (&attributes, oldset);
       if (error != 0)
 	return error;
     }
-- 
2.35.1


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

* Re: [PATCH] posix_spawn blocks SIGCHLD in spawned processes
  2022-03-04  8:38                   ` [PATCH] posix_spawn blocks SIGCHLD in spawned processes (was: Re: master 2c79a8f 2/2: Use posix_spawn if possible.) Jürgen Hötzel
@ 2022-03-04 10:07                     ` Robert Pluim
  2022-03-04 15:41                       ` Jürgen Hötzel
  2022-04-04 14:13                       ` Robert Pluim
  0 siblings, 2 replies; 39+ messages in thread
From: Robert Pluim @ 2022-03-04 10:07 UTC (permalink / raw)
  To: Jürgen Hötzel
  Cc: alan, emacs-devel, Saulius Menkevicius, p.stephani2,
	Matt Armstrong, Eli Zaretskii, mituharu

>>>>> On Fri, 04 Mar 2022 09:38:25 +0100, Jürgen Hötzel <juergen@hoetzel.info> said:
    Jürgen> IMO the correct way to fix this issue is to use the oldset passed by
    Jürgen> emacs_spawn (patch enclosed) just like the fork/exec implementation does.

Sure, that would work as well.

    Jürgen> I guess without a fix many forking commands (that don't examine and
    Jürgen> change mask of blocked signals) will "hang" in Emacs.

Not really. Itʼs a code path thatʼs non-default, since
process-connection-type defaults to t => use pty's, and the command in
question has to care about its children.  But it needs to be fixed
regardless.

I donʼt have a test case, but the patch looks good to me.

Robert
-- 



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

* Re: [PATCH] posix_spawn blocks SIGCHLD in spawned processes
  2022-03-04 10:07                     ` [PATCH] posix_spawn blocks SIGCHLD in spawned processes Robert Pluim
@ 2022-03-04 15:41                       ` Jürgen Hötzel
  2022-03-04 16:08                         ` Robert Pluim
  2022-04-17 18:22                         ` Philipp Stephani
  2022-04-04 14:13                       ` Robert Pluim
  1 sibling, 2 replies; 39+ messages in thread
From: Jürgen Hötzel @ 2022-03-04 15:41 UTC (permalink / raw)
  To: Robert Pluim
  Cc: alan, emacs-devel, Saulius Menkevicius, p.stephani2,
	Matt Armstrong, Eli Zaretskii, mituharu


Robert Pluim <rpluim@gmail.com> writes:

>>>>>> On Fri, 04 Mar 2022 09:38:25 +0100, Jürgen Hötzel <juergen@hoetzel.info> said:
>     Jürgen> IMO the correct way to fix this issue is to use the oldset passed by
>     Jürgen> emacs_spawn (patch enclosed) just like the fork/exec implementation does.
>
> Sure, that would work as well.
>
>     Jürgen> I guess without a fix many forking commands (that don't examine and
>     Jürgen> change mask of blocked signals) will "hang" in Emacs.
>
> Not really. Itʼs a code path thatʼs non-default, since
> process-connection-type defaults to t => use pty's, and the command in

‘call-process’ invokes emacs_spawn 'call-process' with pty set to NULL
so ‘process-connection-type’ doesn't have an effect here.

A minimal C example to reproduce the HANG is

--8<---------------cut here---------------start hang.c------------->8---
#include <signal.h>
#include <stdio.h>
#include <sys/wait.h>
#include <unistd.h>

void chld_handler(int signum) { printf("\nInside CHLD handler function\n"); }

int main(int argc, char *argv[]) {
  sigset_t blocked, old;

  signal(SIGCHLD, chld_handler); // Setup Child handler
  sigemptyset(&blocked);
  sigaddset(&blocked, SIGCHLD);
  sigprocmask(SIG_BLOCK, &blocked, &old);
  if (!fork()) {
    return 0; /* child signals SIGCHLD */
  }
  sigsuspend(&old); /* WAITS for ever when SIGCHILD was originally blocked */
  printf("Parent terminates\n");
  return 0;
}
--8<---------------cut here---------------end hang.c--------------->8---


(call-process "chldtest" nil t nil) will never return.

Regards, Jürgen




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

* Re: [PATCH] posix_spawn blocks SIGCHLD in spawned processes
  2022-03-04 15:41                       ` Jürgen Hötzel
@ 2022-03-04 16:08                         ` Robert Pluim
  2022-04-17 18:22                         ` Philipp Stephani
  1 sibling, 0 replies; 39+ messages in thread
From: Robert Pluim @ 2022-03-04 16:08 UTC (permalink / raw)
  To: Jürgen Hötzel
  Cc: alan, emacs-devel, Saulius Menkevicius, p.stephani2,
	Matt Armstrong, Eli Zaretskii, mituharu

>>>>> On Fri, 04 Mar 2022 16:41:15 +0100, Jürgen Hötzel <juergen@hoetzel.info> said:

    Jürgen> Robert Pluim <rpluim@gmail.com> writes:

    >>>>>>> On Fri, 04 Mar 2022 09:38:25 +0100, Jürgen Hötzel <juergen@hoetzel.info> said:
    Jürgen> IMO the correct way to fix this issue is to use the oldset passed by
    Jürgen> emacs_spawn (patch enclosed) just like the fork/exec implementation does.
    >> 
    >> Sure, that would work as well.
    >> 
    Jürgen> I guess without a fix many forking commands (that don't examine and
    Jürgen> change mask of blocked signals) will "hang" in Emacs.
    >> 
    >> Not really. Itʼs a code path thatʼs non-default, since
    >> process-connection-type defaults to t => use pty's, and the command in

    Jürgen> ‘call-process’ invokes emacs_spawn 'call-process' with pty set to NULL
    Jürgen> so ‘process-connection-type’ doesn't have an effect here.

Yes. And this change to use emacs_spawn has been in master for a
while, and we've had exactly one complaint, which leads me to suspect
that either people donʼt `call-process' processes that are affected by
the incorrect SIGCHLD handling, or that `make-process' is mostly used
with the default setting of `process-connection-type'.

Robert
-- 



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

* Re: [PATCH] posix_spawn blocks SIGCHLD in spawned processes
  2022-03-04 10:07                     ` [PATCH] posix_spawn blocks SIGCHLD in spawned processes Robert Pluim
  2022-03-04 15:41                       ` Jürgen Hötzel
@ 2022-04-04 14:13                       ` Robert Pluim
  1 sibling, 0 replies; 39+ messages in thread
From: Robert Pluim @ 2022-04-04 14:13 UTC (permalink / raw)
  To: Jürgen Hötzel
  Cc: alan, emacs-devel, Saulius Menkevicius, p.stephani2,
	Matt Armstrong, Eli Zaretskii, mituharu

>>>>> On Fri, 04 Mar 2022 11:07:52 +0100, Robert Pluim <rpluim@gmail.com> said:

>>>>> On Fri, 04 Mar 2022 09:38:25 +0100, Jürgen Hötzel <juergen@hoetzel.info> said:
    Jürgen> IMO the correct way to fix this issue is to use the oldset passed by
    Jürgen> emacs_spawn (patch enclosed) just like the fork/exec implementation does.

    Robert> Sure, that would work as well.

    Jürgen> I guess without a fix many forking commands (that don't examine and
    Jürgen> change mask of blocked signals) will "hang" in Emacs.

    Robert> Not really. Itʼs a code path thatʼs non-default, since
    Robert> process-connection-type defaults to t => use pty's, and the command in
    Robert> question has to care about its children.  But it needs to be fixed
    Robert> regardless.

    Robert> I donʼt have a test case, but the patch looks good to me.

Now applied to master as 8103b060d8 in Jürgen's name.

Robert
-- 



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

* Re: [PATCH] posix_spawn blocks SIGCHLD in spawned processes
  2022-03-04 15:41                       ` Jürgen Hötzel
  2022-03-04 16:08                         ` Robert Pluim
@ 2022-04-17 18:22                         ` Philipp Stephani
  2022-04-19 14:36                           ` Robert Pluim
  1 sibling, 1 reply; 39+ messages in thread
From: Philipp Stephani @ 2022-04-17 18:22 UTC (permalink / raw)
  To: Jürgen Hötzel
  Cc: Alan Third, Robert Pluim, emacs-devel, Saulius Menkevicius,
	Matt Armstrong, Eli Zaretskii, YAMAMOTO Mitsuharu



> Am 04.03.2022 um 16:41 schrieb Jürgen Hötzel <juergen@hoetzel.info>:
> 
> 
> Robert Pluim <rpluim@gmail.com> writes:
> 
>>>>>>> On Fri, 04 Mar 2022 09:38:25 +0100, Jürgen Hötzel <juergen@hoetzel.info> said:
>> Jürgen> IMO the correct way to fix this issue is to use the oldset passed by
>> Jürgen> emacs_spawn (patch enclosed) just like the fork/exec implementation does.
>> 
>> Sure, that would work as well.
>> 
>> Jürgen> I guess without a fix many forking commands (that don't examine and
>> Jürgen> change mask of blocked signals) will "hang" in Emacs.
>> 
>> Not really. Itʼs a code path thatʼs non-default, since
>> process-connection-type defaults to t => use pty's, and the command in
> 
> ‘call-process’ invokes emacs_spawn 'call-process' with pty set to NULL
> so ‘process-connection-type’ doesn't have an effect here.
> 
> A minimal C example to reproduce the HANG is
> 
> --8<---------------cut here---------------start hang.c------------->8---
> #include <signal.h>
> #include <stdio.h>
> #include <sys/wait.h>
> #include <unistd.h>
> 
> void chld_handler(int signum) { printf("\nInside CHLD handler function\n"); }
> 
> int main(int argc, char *argv[]) {
> sigset_t blocked, old;
> 
> signal(SIGCHLD, chld_handler); // Setup Child handler
> sigemptyset(&blocked);
> sigaddset(&blocked, SIGCHLD);
> sigprocmask(SIG_BLOCK, &blocked, &old);
> if (!fork()) {
> return 0; /* child signals SIGCHLD */
> }
> sigsuspend(&old); /* WAITS for ever when SIGCHILD was originally blocked */
> printf("Parent terminates\n");
> return 0;
> }
> --8<---------------cut here---------------end hang.c--------------->8---
> 
> 
> (call-process "chldtest" nil t nil) will never return.

If not already done, would you mind installing this example as a new regression test?  This area seems subtle enough that we'd benefit from testing the behavior explicitly.


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

* Re: [PATCH] posix_spawn blocks SIGCHLD in spawned processes
  2022-04-17 18:22                         ` Philipp Stephani
@ 2022-04-19 14:36                           ` Robert Pluim
  2022-04-19 14:48                             ` Philipp Stephani
  2022-04-19 16:07                             ` Eli Zaretskii
  0 siblings, 2 replies; 39+ messages in thread
From: Robert Pluim @ 2022-04-19 14:36 UTC (permalink / raw)
  To: Philipp Stephani
  Cc: Alan Third, Jürgen Hötzel, emacs-devel,
	Saulius Menkevicius, Matt Armstrong, Eli Zaretskii,
	YAMAMOTO Mitsuharu

>>>>> On Sun, 17 Apr 2022 20:22:13 +0200, Philipp Stephani <p.stephani2@gmail.com> said:

    Philipp> If not already done, would you mind installing this example as a new
    Philipp> regression test?  This area seems subtle enough that we'd benefit from
    Philipp> testing the behavior explicitly.

I donʼt think our test suite has support for compiling C programs
(Emacs C modules yes, but not standalone programs).

Robert
-- 



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

* Re: [PATCH] posix_spawn blocks SIGCHLD in spawned processes
  2022-04-19 14:36                           ` Robert Pluim
@ 2022-04-19 14:48                             ` Philipp Stephani
  2022-04-19 16:07                             ` Eli Zaretskii
  1 sibling, 0 replies; 39+ messages in thread
From: Philipp Stephani @ 2022-04-19 14:48 UTC (permalink / raw)
  To: Robert Pluim
  Cc: Alan Third, Jürgen Hötzel, Emacs developers,
	Saulius Menkevicius, Matt Armstrong, Eli Zaretskii,
	YAMAMOTO Mitsuharu



> Am 19.04.2022 um 16:36 schrieb Robert Pluim <rpluim@gmail.com>:
> 
>>>>>> On Sun, 17 Apr 2022 20:22:13 +0200, Philipp Stephani <p.stephani2@gmail.com> said:
> 
>    Philipp> If not already done, would you mind installing this example as a new
>    Philipp> regression test?  This area seems subtle enough that we'd benefit from
>    Philipp> testing the behavior explicitly.
> 
> I donʼt think our test suite has support for compiling C programs
> (Emacs C modules yes, but not standalone programs).

I wouldn't expect that we'd need specific support for that, it's just another Make target.


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

* Re: [PATCH] posix_spawn blocks SIGCHLD in spawned processes
  2022-04-19 14:36                           ` Robert Pluim
  2022-04-19 14:48                             ` Philipp Stephani
@ 2022-04-19 16:07                             ` Eli Zaretskii
  2022-04-19 17:32                               ` Robert Pluim
  1 sibling, 1 reply; 39+ messages in thread
From: Eli Zaretskii @ 2022-04-19 16:07 UTC (permalink / raw)
  To: Robert Pluim
  Cc: alan, juergen, emacs-devel, sauliusmenkevicius, p.stephani2, matt,
	mituharu

> From: Robert Pluim <rpluim@gmail.com>
> Gmane-Reply-To-List: yes
> Date: Tue, 19 Apr 2022 16:36:03 +0200
> Cc: Alan Third <alan@idiocy.org>,
>  Jürgen Hötzel <juergen@hoetzel.info>,
>  emacs-devel@gnu.org, Saulius Menkevicius <sauliusmenkevicius@fastmail.com>,
>  Matt Armstrong <matt@rfc20.org>, Eli Zaretskii <eliz@gnu.org>,
>  YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
> 
> >>>>> On Sun, 17 Apr 2022 20:22:13 +0200, Philipp Stephani <p.stephani2@gmail.com> said:
> 
>     Philipp> If not already done, would you mind installing this example as a new
>     Philipp> regression test?  This area seems subtle enough that we'd benefit from
>     Philipp> testing the behavior explicitly.
> 
> I donʼt think our test suite has support for compiling C programs
> (Emacs C modules yes, but not standalone programs).

You could perhaps use Emacs as such a "C program"?



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

* Re: [PATCH] posix_spawn blocks SIGCHLD in spawned processes
  2022-04-19 16:07                             ` Eli Zaretskii
@ 2022-04-19 17:32                               ` Robert Pluim
  0 siblings, 0 replies; 39+ messages in thread
From: Robert Pluim @ 2022-04-19 17:32 UTC (permalink / raw)
  To: Eli Zaretskii
  Cc: alan, juergen, emacs-devel, sauliusmenkevicius, p.stephani2, matt,
	mituharu

>>>>> On Tue, 19 Apr 2022 19:07:35 +0300, Eli Zaretskii <eliz@gnu.org> said:
    >> I donʼt think our test suite has support for compiling C programs
    >> (Emacs C modules yes, but not standalone programs).

    Eli> You could perhaps use Emacs as such a "C program"?

Yes, except that running emacs from emacs doesnʼt fail the way the
example program does 🙂

Robert
-- 



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

end of thread, other threads:[~2022-04-19 17:32 UTC | newest]

Thread overview: 39+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-25  6:48 master 2c79a8f 2/2: Use posix_spawn if possible Saulius Menkevicius
2022-01-25  8:41 ` Eli Zaretskii
2022-01-25  8:58   ` Saulius Menkevicius
2022-01-25 11:46     ` Jostein Kjønigsen
2022-01-25 11:55       ` Po Lu
2022-01-25 12:22     ` Eli Zaretskii
2022-01-25 12:25       ` Saulius Menkevicius
2022-01-25 13:47         ` Eli Zaretskii
2022-01-28 17:12           ` Matt Armstrong
2022-01-29  8:03             ` Saulius Menkevičius
2022-01-29  8:26             ` Eli Zaretskii
2022-01-31 20:48               ` Saulius Menkevicius
2022-02-01  9:59                 ` Robert Pluim
2022-02-01 18:30                   ` Saulius Menkevicius
2022-02-01 19:23                     ` Robert Pluim
2022-02-01 19:52                       ` Eli Zaretskii
2022-02-02  8:30                         ` Robert Pluim
2022-02-02  8:54                           ` Saulius Menkevičius
2022-02-07 21:12                             ` Saulius Menkevicius
2022-02-08  8:27                               ` Robert Pluim
2022-02-08 12:12                               ` Eli Zaretskii
2022-02-08 12:18                                 ` Saulius Menkevicius
2022-02-08 14:59                                   ` Robert Pluim
2022-02-08 21:09                                     ` Saulius Menkevicius
2022-02-09  8:48                                       ` Robert Pluim
2022-02-12  8:44                                         ` Saulius Menkevicius
2022-02-12  8:59                                           ` Eli Zaretskii
2022-02-12  9:42                                             ` Saulius Menkevicius
2022-03-04  8:38                   ` [PATCH] posix_spawn blocks SIGCHLD in spawned processes (was: Re: master 2c79a8f 2/2: Use posix_spawn if possible.) Jürgen Hötzel
2022-03-04 10:07                     ` [PATCH] posix_spawn blocks SIGCHLD in spawned processes Robert Pluim
2022-03-04 15:41                       ` Jürgen Hötzel
2022-03-04 16:08                         ` Robert Pluim
2022-04-17 18:22                         ` Philipp Stephani
2022-04-19 14:36                           ` Robert Pluim
2022-04-19 14:48                             ` Philipp Stephani
2022-04-19 16:07                             ` Eli Zaretskii
2022-04-19 17:32                               ` Robert Pluim
2022-04-04 14:13                       ` Robert Pluim
2022-01-25 13:15 ` master 2c79a8f 2/2: Use posix_spawn if possible Stefan Monnier

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).