Crashes in cmake subprocesses since 3.6.0
Takashi Yano
takashi.yano@nifty.ne.jp
Thu Apr 3 05:49:52 GMT 2025
On Thu, 3 Apr 2025 12:32:35 +0900
Takashi Yano wrote:
> > Still, I wonder in which thread raw_write is running during fork().
>
> Weird enough, raw_write() is called in the main thread (_main_tls).
> Any chance, fixup_after_fork() is not called?
It seems that raw_write() is called before returning from
pthread::atforkchild() in fork::child().
Moving _my_tls.fixup_after_fork() before atforkchild() seems
to solve the issue.
What about:
ld_preload ();
fixup_hooks_after_fork ();
ch.rd_proc_pipe = ch.wr_proc_pipe = NULL;
?
Should any of these be before pthread::atforkchild() asl well?
I'm now performing a long-run test with the patch:
diff --git a/winsup/cygwin/fork.cc b/winsup/cygwin/fork.cc
index 0742ab363..28daf2682 100644
--- a/winsup/cygwin/fork.cc
+++ b/winsup/cygwin/fork.cc
@@ -187,7 +187,6 @@ frok::child (volatile char * volatile here)
ForceCloseHandle1 (fork_info->forker_finished, forker_finished);
- pthread::atforkchild ();
cygbench ("fork-child");
ld_preload ();
fixup_hooks_after_fork ();
@@ -196,6 +195,7 @@ frok::child (volatile char * volatile here)
rd_proc_pipe that would be an invalid handle. In the case of
wr_proc_pipe it would be == my_wr_proc_pipe. Both would be bad. */
ch.rd_proc_pipe = ch.wr_proc_pipe = NULL;
+ pthread::atforkchild ();
CloseHandle (hParent);
hParent = NULL;
cygwin_finished_initializing = true;
--
Takashi Yano <takashi.yano@nifty.ne.jp>
More information about the Cygwin
mailing list