Previously, the callback registered by pthread_atfork() is called
before _my_tls.fixup_after_fork(). This causes misbehaviour if the
callback uses tls related functions. Due to this problem, subprocess
of cmake (> 3.29.x) sometimes fails after the commit 7ed9adb356df.
The commit 7ed9adb356df triggers this issue, but it is not the issue
of that patch. This patch moves the pthread::atforkchild() at the
end of the fork::child().

Addresses: https://cygwin.com/pipermail/cygwin/2025-March/257800.html
Addresses: https://github.com/msys2/msys2-runtime/issues/272
Fixes: f02b22dcee17 ("* fork.cc (frok::child): Change order of cleanup prior to 
return.")
Reported-by: Christoph Reiter <reiter.christ...@gmail.com>
Reviewed-by: Jeremy Drake <cyg...@jdrake.com>
Signed-off-by: Takashi Yano <takashi.y...@nifty.ne.jp>
---
 winsup/cygwin/fork.cc       | 2 +-
 winsup/cygwin/release/3.6.1 | 4 ++++
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/winsup/cygwin/fork.cc b/winsup/cygwin/fork.cc
index 783971b76..f88acdbbf 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 ();
@@ -199,6 +198,7 @@ frok::child (volatile char * volatile here)
   CloseHandle (hParent);
   hParent = NULL;
   cygwin_finished_initializing = true;
+  pthread::atforkchild ();
   return 0;
 }
 
diff --git a/winsup/cygwin/release/3.6.1 b/winsup/cygwin/release/3.6.1
index 07a29ecce..5a15642b8 100644
--- a/winsup/cygwin/release/3.6.1
+++ b/winsup/cygwin/release/3.6.1
@@ -31,3 +31,7 @@ Fixes:
 
 - Return EMFILE when opening /dev/ptmx too many times.
   Addresses: https://cygwin.com/pipermail/cygwin/2025-March/257786.html
+
+- Move pthread::atforkchild() at the end of fork::child().
+  Addresses: https://cygwin.com/pipermail/cygwin/2025-March/257800.html
+  Addresses: https://github.com/msys2/msys2-runtime/issues/272
-- 
2.45.1

Reply via email to