bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: macOS 14 objc `+initialize` forced crash due to fork after thread


From: Chet Ramey
Subject: Re: macOS 14 objc `+initialize` forced crash due to fork after thread
Date: Mon, 6 May 2024 10:26:34 -0400
User-agent: Mozilla Thunderbird

On 5/3/24 10:31 PM, Tom wrote:

That report has a work-around invoking a syntax error which presumably calls 
out to `setlocale`/`gettext` pre-`fork`, caching the result somewhere (`bash` 
or `gettext`?) such that the offending call post-`fork` on an unknown command 
doesn't trigger this issue.

That feels brittle; a more general approach might be to move both invocations 
either side of the fork (as alluded to by the [gettext maintainer][2]), which 
for `bash` probably means calling `gettext` before `fork`.

[1]: https://trac.macports.org/ticket/68638
[2]: https://lists.gnu.org/archive/html/bug-gettext/2024-05/msg00001.html

This seems like a completely Apple-specific problem, since the API
documentation doesn't mention threading, and bash doesn't use any threads
anywhere else. So let's see if we can devise an Apple-specific solution.

It looks like it's the call to setlocale() that creates the auxiliary
threads, and the call to gettext() that forces the artificial crash. Bash
always calls setlocale() as part of initialization, but may not call
gettext() until it has to print a translatable message. So any call to
gettext() in the parent process before any fork would be sufficient to
complete the initialization? I can certainly add a dummy call to gettext()
somewhere, or even a call to initialize and cache the translation of
"command not found" (for instance).

--
``The lyf so short, the craft so long to lerne.'' - Chaucer
                 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, UTech, CWRU    chet@case.edu    http://tiswww.cwru.edu/~chet/

Attachment: OpenPGP_signature.asc
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]