From a976ad864651ef6858ad7767d827cdf8b9b36788 Mon Sep 17 00:00:00 2001 From: Shoichi Kaji Date: Mon, 29 Apr 2024 03:58:32 +0900 Subject: [PATCH] dlopen /System/Library/Frameworks/Foundation.framework/Foundation to initialize Objective-C APIs before fork(2) --- lib/App/cpm/CLI.pm | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lib/App/cpm/CLI.pm b/lib/App/cpm/CLI.pm index 7329fd0..a3e86ba 100644 --- a/lib/App/cpm/CLI.pm +++ b/lib/App/cpm/CLI.pm @@ -365,6 +365,18 @@ sub cmd_install { sub install { my ($self, $master, $worker, $num) = @_; + if ($num > 1 + && $^O eq "darwin" + && !exists $ENV{OBJC_DISABLE_INITIALIZE_FORK_SAFETY} + && !$self->{_darwin_fixed} + ) { + my $lib = "/System/Library/Frameworks/Foundation.framework/Foundation"; + $master->{logger}->log("dlopen $lib to initialize Objective-C APIs before fork(2)"); + require DynaLoader; + DynaLoader::dl_load_file $lib; + $self->{_darwin_fixed} = 1; + } + my @task = $master->get_task; Parallel::Pipes::App->run( num => $num,