Merge changes Icf26010a,Ib6161567 into main
* changes: Always initialize curl in parent process on darwin Fix failing darwin tests
This commit is contained in:
commit
e8a603fb2f
|
@ -2,11 +2,6 @@
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
<key>EnvironmentVariables</key>
|
|
||||||
<dict>
|
|
||||||
<key>OBJC_DISABLE_INITIALIZE_FORK_SAFETY</key>
|
|
||||||
<string>YES</string>
|
|
||||||
</dict>
|
|
||||||
<key>Label</key>
|
<key>Label</key>
|
||||||
<string>org.nixos.nix-daemon</string>
|
<string>org.nixos.nix-daemon</string>
|
||||||
<key>KeepAlive</key>
|
<key>KeepAlive</key>
|
||||||
|
|
|
@ -398,10 +398,6 @@ stdenv.mkDerivation (finalAttrs: {
|
||||||
|
|
||||||
mesonInstallCheckFlags = [ "--suite=installcheck" ];
|
mesonInstallCheckFlags = [ "--suite=installcheck" ];
|
||||||
|
|
||||||
preInstallCheck = lib.optionalString stdenv.hostPlatform.isDarwin ''
|
|
||||||
export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
|
|
||||||
'';
|
|
||||||
|
|
||||||
installCheckPhase = lib.optionalString buildWithMeson ''
|
installCheckPhase = lib.optionalString buildWithMeson ''
|
||||||
runHook preInstallCheck
|
runHook preInstallCheck
|
||||||
flagsArray=($mesonInstallCheckFlags "''${mesonInstallCheckFlagsArray[@]}")
|
flagsArray=($mesonInstallCheckFlags "''${mesonInstallCheckFlagsArray[@]}")
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
#include "config-impl.hh"
|
#include "config-impl.hh"
|
||||||
|
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
|
#include <curl/curl.h>
|
||||||
#include <sys/sysctl.h>
|
#include <sys/sysctl.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -409,10 +410,21 @@ void initLibStore() {
|
||||||
|
|
||||||
preloadNSS();
|
preloadNSS();
|
||||||
|
|
||||||
|
#if __APPLE__
|
||||||
|
/* Because of an objc quirk[1], calling curl_global_init for the first time
|
||||||
|
after fork() will always result in a crash.
|
||||||
|
Up until now the solution has been to set OBJC_DISABLE_INITIALIZE_FORK_SAFETY
|
||||||
|
for every nix process to ignore that error.
|
||||||
|
Instead of working around that error we address it at the core -
|
||||||
|
by calling curl_global_init here, which should mean curl will already
|
||||||
|
have been initialized by the time we try to do so in a forked process.
|
||||||
|
|
||||||
|
[1] https://github.com/apple-oss-distributions/objc4/blob/01edf1705fbc3ff78a423cd21e03dfc21eb4d780/runtime/objc-initialize.mm#L614-L636
|
||||||
|
*/
|
||||||
|
curl_global_init(CURL_GLOBAL_ALL);
|
||||||
/* On macOS, don't use the per-session TMPDIR (as set e.g. by
|
/* On macOS, don't use the per-session TMPDIR (as set e.g. by
|
||||||
sshd). This breaks build users because they don't have access
|
sshd). This breaks build users because they don't have access
|
||||||
to the TMPDIR, in particular in ‘nix-store --serve’. */
|
to the TMPDIR, in particular in ‘nix-store --serve’. */
|
||||||
#if __APPLE__
|
|
||||||
if (getEnv("TMPDIR").value_or("/tmp").starts_with("/var/folders/"))
|
if (getEnv("TMPDIR").value_or("/tmp").starts_with("/var/folders/"))
|
||||||
unsetenv("TMPDIR");
|
unsetenv("TMPDIR");
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -2,7 +2,7 @@ source common.sh
|
||||||
|
|
||||||
sed -e "s|@localstatedir@|$TEST_ROOT/profile-var|g" -e "s|@coreutils@|$coreutils|g" < ../../scripts/nix-profile.sh.in > $TEST_ROOT/nix-profile.sh
|
sed -e "s|@localstatedir@|$TEST_ROOT/profile-var|g" -e "s|@coreutils@|$coreutils|g" < ../../scripts/nix-profile.sh.in > $TEST_ROOT/nix-profile.sh
|
||||||
|
|
||||||
user=$(whoami)
|
user=$(whoami || echo -n nixbld)
|
||||||
rm -rf $TEST_HOME $TEST_ROOT/profile-var
|
rm -rf $TEST_HOME $TEST_ROOT/profile-var
|
||||||
mkdir -p $TEST_HOME
|
mkdir -p $TEST_HOME
|
||||||
USER=$user $SHELL -e -c ". $TEST_ROOT/nix-profile.sh; set"
|
USER=$user $SHELL -e -c ". $TEST_ROOT/nix-profile.sh; set"
|
||||||
|
|
|
@ -28,7 +28,7 @@ substituters =
|
||||||
flake-registry = $TEST_ROOT/registry.json
|
flake-registry = $TEST_ROOT/registry.json
|
||||||
show-trace = true
|
show-trace = true
|
||||||
include nix.conf.extra
|
include nix.conf.extra
|
||||||
trusted-users = $(whoami)
|
trusted-users = $(whoami || id -u)
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
cat > "$NIX_CONF_DIR"/nix.conf.extra <<EOF
|
cat > "$NIX_CONF_DIR"/nix.conf.extra <<EOF
|
||||||
|
|
Loading…
Reference in a new issue