Opened 5 months ago

Last modified 2 weeks ago

#68817 assigned defect

php81-fpm: crashes constantly

Reported by: miken32 (Michael Newton) Owned by: ryandesign (Ryan Carsten Schmidt)
Priority: Normal Milestone:
Component: ports Version:
Keywords: sonoma Cc:
Port: php

Description

This is a known issue I think since macOS 14 that affects a lot of software using fork() and Objective C libraries (or something like that, I am not a low-level programmer.)

objc[70634]: +[__SwiftNativeNSStringBase initialize] may have been in progress in another thread when fork() was called.
objc[70634]: +[__SwiftNativeNSStringBase initialize] may have been in progress in another thread when fork() was called. We cannot safely call it or ignore it in the fork() child process. Crashing instead. Set a breakpoint on objc_initializeAfterForkError to debug.

There is an open ticket with PHP but it doesn't sound like it will get fixed anytime soon.

Workaround is setting an environment variable by changing the launch daemon to look like this:

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd" >
<plist version='1.0'>
<dict>
<key>EnvironmentVariables</key>
<dict>
	<key>OBJC_DISABLE_INITIALIZE_FORK_SAFETY</key>
	<string>YES</string>
</dict>
<key>Label</key><string>org.macports.php81-fpm</string>
<key>ProgramArguments</key>
<array>
	<string>/opt/local/bin/daemondo</string>
	<string>--label=php81-fpm</string>
	<string>--start-cmd</string>
	<string>/opt/local/sbin/php-fpm81</string>
	<string>;</string>
	<string>--pid=exec</string>
</array>
<key>Disabled</key><true/>
<key>KeepAlive</key><true/>
</dict>
</plist>

This may be considered unsafe by some, so maybe it should be done as a variant?

Change History (3)

comment:1 Changed 5 months ago by ryandesign (Ryan Carsten Schmidt)

Keywords: sonoma added
Port: php added; php-fpm removed
Summary: PHP FPM crashes constantlyphp81-fpm: crashes constantly

A quick Google search of OBJC_DISABLE_INITIALIZE_FORK_SAFETY finds results from years ago and that this environment variable and the OS feature it disables have been around since macOS High Sierra. But I've definitely run php-fpm under High Sierra and Catalina and Monterey. And you say this problem started for you in Sonoma. I wonder what changed in Sonoma.

If the software crashes without adding the environment variable on Sonoma and later, then I think I should add it unconditionally on Sonoma and later to fix the crash rather than use a variant.

comment:2 in reply to:  description Changed 5 months ago by ryandesign (Ryan Carsten Schmidt)

Replying to miken32:

There is an open ticket with PHP but it doesn't sound like it will get fixed anytime soon.

Having now read that entire issue, the mentions there of gettext and the Foundation framework make me wonder updating to gettext 0.22.x helps, since gettext 0.22.x introduces the fix for a known crashing issue on Sonoma by linking with the Foundation framework.

comment:3 Changed 2 weeks ago by miken32 (Michael Newton)

Just a quick note to say that no, gettext 0.22 didn't help. I'm currently on gettext @0.22.5 (devel) and php83-fpm @8.3.6 (lang, www) with the same issue and resolution.

It pops up elsewhere as well, eg typing sudo ls / followed by Tab causes bash-completion to barf somehow (it's something to do with sudo; works fine otherwise.)

mike ~ ❱❱❱ sudo ls /objc[43923]: +[__SwiftNativeNSStringBase initialize] may have been in progress in another thread when fork() was called.
objc[43923]: +[__SwiftNativeNSStringBase initialize] may have been in progress in another thread when fork() was called. We cannot safely call it or ignore it in the fork() child process. Crashing instead. Set a breakpoint on objc_initializeAfterForkError to debug.
Abort trap: 6


Password:
Note: See TracTickets for help on using tickets.