Merge changes Icf26010a,Ib6161567 into main

* changes:
  Always initialize curl in parent process on darwin
  Fix failing darwin tests
This commit is contained in:
Nikodem Rabuliński
2024-05-07 21:26:24 +00:00
committed by Gerrit Code Review
5 changed files with 15 additions and 12 deletions
+13 -1
View File
@@ -25,6 +25,7 @@
#include "config-impl.hh"
#ifdef __APPLE__
#include <curl/curl.h>
#include <sys/sysctl.h>
#endif
@@ -409,10 +410,21 @@ void initLibStore() {
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
sshd). This breaks build users because they don't have access
to the TMPDIR, in particular in nix-store --serve. */
#if __APPLE__
if (getEnv("TMPDIR").value_or("/tmp").starts_with("/var/folders/"))
unsetenv("TMPDIR");
#endif