Hello,
Regression in Cygwin 3.6.9: Deadlock when spawning many concurrent
Windows-native processes (nmake.exe) — works in 3.6.5‑1
Version affected: Cygwin 3.6.9 (latest as of August 2026)
Version NOT affected: Cygwin 3.6.5‑1 (stable, no issues)
Summary
Cygwin 3.6.9 introduces a regression in process management that causes complete
build deadlock when spawning many concurrent Windows-native processes
(specifically nmake.exe). The same workload has run flawlessly for 20+ years on
all previous Cygwin versions, including 3.6.5‑1. Under 3.6.9, the build freezes
once some parallel job limit is reached, leaving dozens of idle sh.exe
processes and stalled nmake.exe processes. Ctrl‑C kills the Windows nmake.exe
processes but Cygwin’s sh.exe instances remain stuck, and the terminal never
returns control. Reverting to 3.6.5‑1 immediately restores correct behavior.
This is a reproducible regression in Cygwin’s process/signal/pipe handling.
Environment
* Windows Server 2025 (WS2025)
* Heavy parallel build workload
* 15 concurrent nmake.exe processes
* Each nmake.exe spawns many short-lived Windows-native tools
* Cygwin shell (sh.exe) orchestrates the build
* No Cygwin-native processes involved — all Windows-native
Steps to Reproduce
1. Install Cygwin 3.6.9
2. Launch a Cygwin shell
3. Start 15 parallel Windows-native builds, e.g.:
Code
for i in {1..15}; do
(nmake.exe -f Makefile$i &)
done
wait
Each makefile repeatedly spawns short-lived Windows-native tools
(ASN.1-compiler processes).
4. Observe behavior once all 15 jobs are active.
Actual Behavior (3.6.9)
* Build freezes completely once a certain parallel limit is reached
* All nmake.exe processes become idle
* Dozens of idle sh.exe accumulate
* No CPU usage
* No progress
* Ctrl‑C kills nmake.exe but does not kill sh.exe
* Cygwin console never returns
* Terminal must be forcibly closed
* No such behavior in 3.6.5‑1
This is consistent with a signal-thread or pipe inheritance deadlock.
Expected Behavior (3.6.5‑1 and earlier)
* All 15 parallel nmake.exe processes run normally
* No idle sh.exe accumulation
* No deadlock
* Ctrl‑C cleanly terminates all processes
* Console returns immediately
* Build completes successfully
This behavior has been stable for decades.
Notes
This workload is a strong stress test for:
* spawn.cc
* sigproc.cc
* pipe inheritance
* process table updates
* console control handling
* synchronization primitives
The regression appears only in 3.6.9.
Conclusion
Cygwin 3.6.9 introduces a reproducible deadlock when orchestrating many
concurrent Windows-native processes via Cygwin’s shell. This is a regression
from 3.6.5‑1. The issue affects real-world build systems and should be
investigated.
I can provide:
* process snapshots
* strace logs
* Windows process tree dumps
* minimal reproduction scripts
upon request.
Nick
--
Problem reports: https://cygwin.com/problems.html
FAQ: https://cygwin.com/faq/
Documentation: https://cygwin.com/docs.html
Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple