// https://issues.dlang.org/show_bug.cgi?id=20256 extern(C) __gshared string[] rt_options = [ "gcopt=parallel:1" ]; void main() { version (Posix) { import core.sys.posix.signal; import core.sys.posix.unistd; import core.thread; import core.memory; sigset_t m; sigemptyset(&m); sigaddset(&m, SIGHUP); auto x = new int[](10000); foreach (i; 0 .. 10000) { x ~= i; } GC.collect(); // GC create thread sigprocmask(SIG_BLOCK, &m, null); // block SIGHUP from delivery to main thread auto parent_pid = getpid(); auto child_pid = fork(); assert(child_pid >= 0); if (child_pid == 0) { kill(parent_pid, SIGHUP); // send signal to parent _exit(0); } // parent Thread.sleep(100.msecs); // if we are here, then GC threads didn't receive SIGHUP, // otherwise whole process killed _exit(0); } }