From 47de562e7c33ecfa712e000297f10392f3150ba4 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Wed, 7 Dec 2011 10:48:17 +0000 Subject: * spawn.cc (child_info_spawn::worker): Add CREATE_BREAKAWAY_FROM_JOB to all spawned processes. Explain why. --- winsup/cygwin/ChangeLog | 5 +++++ winsup/cygwin/spawn.cc | 12 +++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 9acf2b34b..27316a096 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,8 @@ +2011-12-07 Corinna Vinschen + + * spawn.cc (child_info_spawn::worker): Add CREATE_BREAKAWAY_FROM_JOB + to all spawned processes. Explain why. + 2011-12-06 Christopher Faylor * fhandler_fifo.cc (fhandler_fifo::wait): Fix stupid typo and actually diff --git a/winsup/cygwin/spawn.cc b/winsup/cygwin/spawn.cc index 75bde2a3f..a509e03cb 100644 --- a/winsup/cygwin/spawn.cc +++ b/winsup/cygwin/spawn.cc @@ -452,7 +452,17 @@ child_info_spawn::worker (const char *prog_arg, const char *const *argv, c_flags = GetPriorityClass (GetCurrentProcess ()); sigproc_printf ("priority class %d", c_flags); - c_flags |= CREATE_SEPARATE_WOW_VDM | CREATE_UNICODE_ENVIRONMENT; + /* We're adding the CREATE_BREAKAWAY_FROM_JOB flag here to workaround issues + with the "Program Compatibility Assistant (PCA) Service" observed on + Windows 7. For some reason, when starting long running sessions from + mintty, the affected svchost.exe process takes more and more memory and + at one point takes over the CPU. At this point the machine becomes + unresponsive. The only way to get back to normal is to stop the entire + mintty session, or to stop the PCA service. However, a process which + is controlled by PCA is part of a compatibility job, which allows child + processes to break away from the job. This helps to avoid this issue. */ + c_flags |= CREATE_SEPARATE_WOW_VDM | CREATE_UNICODE_ENVIRONMENT + | CREATE_BREAKAWAY_FROM_JOB; if (mode == _P_DETACH) c_flags |= DETACHED_PROCESS; -- cgit v1.2.3