From ebbdf21a7ebc6730a3d5f170b934143bdb18a414 Mon Sep 17 00:00:00 2001 From: Martin Nowak Date: Tue, 4 Oct 2016 23:48:25 +0200 Subject: [PATCH] fix Issue 16580 - spawnShell segfaults on macOS - partially Revert "Merge pull request #4493 from schveiguy/fixcycles2" - recreate processinit (and import it from std.process) to call std.process shared ctor w/o creating a cycle - keep it separate from phobosinit to not drag std.encoding into any binary using std.process --- posix.mak | 2 +- std/internal/phobosinit.d | 10 ---------- std/internal/processinit.d | 22 ++++++++++++++++++++++ std/process.d | 1 + win32.mak | 1 + win64.mak | 1 + 6 files changed, 26 insertions(+), 11 deletions(-) create mode 100644 std/internal/processinit.d diff --git a/posix.mak b/posix.mak index 8b9f55ea391..ada95490bc9 100644 --- a/posix.mak +++ b/posix.mak @@ -216,7 +216,7 @@ EXTRA_MODULES_INTERNAL := $(addprefix \ std/internal/digest/, sha_SSSE3 ) $(addprefix \ std/internal/math/, biguintcore biguintnoasm biguintx86 \ gammafunction errorfunction) $(addprefix std/internal/, \ - cstring phobosinit unicode_tables scopebuffer\ + cstring phobosinit processinit unicode_tables scopebuffer\ unicode_comp unicode_decomp unicode_grapheme unicode_norm) \ $(addprefix std/internal/test/, dummyrange) \ $(addprefix std/experimental/ndslice/, internal) \ diff --git a/std/internal/phobosinit.d b/std/internal/phobosinit.d index 961da9d0c96..85fd1c25d1f 100644 --- a/std/internal/phobosinit.d +++ b/std/internal/phobosinit.d @@ -11,16 +11,6 @@ +/ module std.internal.phobosinit; -version(OSX) -{ - extern(C) void std_process_shared_static_this(); - - shared static this() - { - std_process_shared_static_this(); - } -} - shared static this() { import std.encoding : EncodingScheme; diff --git a/std/internal/processinit.d b/std/internal/processinit.d new file mode 100644 index 00000000000..df241089aa0 --- /dev/null +++ b/std/internal/processinit.d @@ -0,0 +1,22 @@ +// Written in the D programming language. + +/++ + The only purpose of this module is to do the static construction for + std.process in order to eliminate cyclic construction errors. + + Copyright: Copyright 2011 - + License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0). + Authors: Jonathan M Davis and Kato Shoichi + Source: $(PHOBOSSRC std/internal/_processinit.d) + +/ +module std.internal.processinit; + +version(OSX) +{ + extern(C) void std_process_shared_static_this(); + + shared static this() + { + std_process_shared_static_this(); + } +} diff --git a/std/process.d b/std/process.d index 1ef006739a2..f7740a6ef3c 100644 --- a/std/process.d +++ b/std/process.d @@ -100,6 +100,7 @@ version (Windows) import std.range.primitives; import std.stdio; +import std.internal.processinit; import std.internal.cstring; diff --git a/win32.mak b/win32.mak index 38cc8242fc8..7930354876d 100644 --- a/win32.mak +++ b/win32.mak @@ -268,6 +268,7 @@ SRC_STD_C_FREEBSD= \ SRC_STD_INTERNAL= \ std\internal\cstring.d \ std\internal\phobosinit.d \ + std\internal\processinit.d \ std\internal\unicode_tables.d \ std\internal\unicode_comp.d \ std\internal\unicode_decomp.d \ diff --git a/win64.mak b/win64.mak index 838595e31c2..56df482e21e 100644 --- a/win64.mak +++ b/win64.mak @@ -287,6 +287,7 @@ SRC_STD_C_FREEBSD= \ SRC_STD_INTERNAL= \ std\internal\cstring.d \ std\internal\phobosinit.d \ + std\internal\processinit.d \ std\internal\unicode_tables.d \ std\internal\unicode_comp.d \ std\internal\unicode_decomp.d \