This is the mail archive of the cygwin-cvs@cygwin.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[newlib-cygwin] Drop has_program_compatibility_assistant flag


https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=8b8c6c014bd9807c248ffe0cb8211e7714cc2241

commit 8b8c6c014bd9807c248ffe0cb8211e7714cc2241
Author: Corinna Vinschen <corinna@vinschen.de>
Date:   Tue Dec 15 15:53:16 2015 +0100

    Drop has_program_compatibility_assistant flag

Diff:
---
 winsup/cygwin/spawn.cc  | 60 +++++++++++++++++++++++--------------------------
 winsup/cygwin/wincap.cc |  7 ------
 winsup/cygwin/wincap.h  |  2 --
 3 files changed, 28 insertions(+), 41 deletions(-)

diff --git a/winsup/cygwin/spawn.cc b/winsup/cygwin/spawn.cc
index b7e09c3..1c4f1f5 100644
--- a/winsup/cygwin/spawn.cc
+++ b/winsup/cygwin/spawn.cc
@@ -405,39 +405,35 @@ child_info_spawn::worker (const char *prog_arg, const char *const *argv,
 
       c_flags |= CREATE_SEPARATE_WOW_VDM | CREATE_UNICODE_ENVIRONMENT;
 
-      if (wincap.has_program_compatibility_assistant ())
+      /* We're adding the CREATE_BREAKAWAY_FROM_JOB flag here to workaround
+	 issues with the "Program Compatibility Assistant (PCA) Service".
+	 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.
+
+	 First we call IsProcessInJob.  It fetches the information whether or
+	 not we're part of a job 20 times faster than QueryInformationJobObject.
+
+	 (*) Note that this is not mintty's fault.  It has just been observed
+	 with mintty in the first place.  See the archives for more info:
+	 http://cygwin.com/ml/cygwin-developers/2012-02/msg00018.html */
+      JOBOBJECT_BASIC_LIMIT_INFORMATION jobinfo;
+      BOOL is_in_job;
+
+      if (IsProcessInJob (GetCurrentProcess (), NULL, &is_in_job)
+	  && is_in_job
+	  && QueryInformationJobObject (NULL, JobObjectBasicLimitInformation,
+				     &jobinfo, sizeof jobinfo, NULL)
+	  && (jobinfo.LimitFlags & (JOB_OBJECT_LIMIT_BREAKAWAY_OK
+				    | JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK)))
 	{
-	  /* We're adding the CREATE_BREAKAWAY_FROM_JOB flag here to workaround
-	     issues with the "Program Compatibility Assistant (PCA) Service"
-	     starting with Windows Vista.  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.
-
-	     First we call IsProcessInJob.  It fetches the information whether or
-	     not we're part of a job 20 times faster than QueryInformationJobObject.
-
-	     (*) Note that this is not mintty's fault.  It has just been observed
-	     with mintty in the first place.  See the archives for more info:
-	     http://cygwin.com/ml/cygwin-developers/2012-02/msg00018.html */
-
-	  JOBOBJECT_BASIC_LIMIT_INFORMATION jobinfo;
-	  BOOL is_in_job;
-
-	  if (IsProcessInJob (GetCurrentProcess (), NULL, &is_in_job)
-	      && is_in_job
-	      && QueryInformationJobObject (NULL, JobObjectBasicLimitInformation,
-					 &jobinfo, sizeof jobinfo, NULL)
-	      && (jobinfo.LimitFlags & (JOB_OBJECT_LIMIT_BREAKAWAY_OK
-					| JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK)))
-	    {
-	      debug_printf ("Add CREATE_BREAKAWAY_FROM_JOB");
-	      c_flags |= CREATE_BREAKAWAY_FROM_JOB;
-	    }
+	  debug_printf ("Add CREATE_BREAKAWAY_FROM_JOB");
+	  c_flags |= CREATE_BREAKAWAY_FROM_JOB;
 	}
 
       if (mode == _P_DETACH)
diff --git a/winsup/cygwin/wincap.cc b/winsup/cygwin/wincap.cc
index 5605af6..caa3353 100644
--- a/winsup/cygwin/wincap.cc
+++ b/winsup/cygwin/wincap.cc
@@ -25,7 +25,6 @@ wincaps wincap_xpsp2 __attribute__((section (".cygwin_dll_common"), shared)) = {
   has_gaa_largeaddress_bug:false,
   has_broken_alloc_console:false,
   has_console_logon_sid:false,
-  has_program_compatibility_assistant:false,
   has_pipe_reject_remote_clients:false,
   terminate_thread_frees_stack:false,
   has_precise_system_time:false,
@@ -46,7 +45,6 @@ wincaps wincap_2003 __attribute__((section (".cygwin_dll_common"), shared)) = {
   has_gaa_largeaddress_bug:false,
   has_broken_alloc_console:false,
   has_console_logon_sid:false,
-  has_program_compatibility_assistant:false,
   has_pipe_reject_remote_clients:false,
   terminate_thread_frees_stack:false,
   has_precise_system_time:false,
@@ -67,7 +65,6 @@ wincaps wincap_vista __attribute__((section (".cygwin_dll_common"), shared)) = {
   has_gaa_largeaddress_bug:true,
   has_broken_alloc_console:false,
   has_console_logon_sid:false,
-  has_program_compatibility_assistant:true,
   has_pipe_reject_remote_clients:true,
   terminate_thread_frees_stack:true,
   has_precise_system_time:false,
@@ -88,7 +85,6 @@ wincaps wincap_7 __attribute__((section (".cygwin_dll_common"), shared)) = {
   has_gaa_largeaddress_bug:true,
   has_broken_alloc_console:true,
   has_console_logon_sid:true,
-  has_program_compatibility_assistant:true,
   has_pipe_reject_remote_clients:true,
   terminate_thread_frees_stack:true,
   has_precise_system_time:false,
@@ -109,7 +105,6 @@ wincaps wincap_8 __attribute__((section (".cygwin_dll_common"), shared)) = {
   has_gaa_largeaddress_bug:false,
   has_broken_alloc_console:true,
   has_console_logon_sid:true,
-  has_program_compatibility_assistant:true,
   has_pipe_reject_remote_clients:true,
   terminate_thread_frees_stack:true,
   has_precise_system_time:true,
@@ -130,7 +125,6 @@ wincaps wincap_10 __attribute__((section (".cygwin_dll_common"), shared)) = {
   has_gaa_largeaddress_bug:false,
   has_broken_alloc_console:true,
   has_console_logon_sid:true,
-  has_program_compatibility_assistant:true,
   has_pipe_reject_remote_clients:true,
   terminate_thread_frees_stack:true,
   has_precise_system_time:true,
@@ -151,7 +145,6 @@ wincaps wincap_10_1511 __attribute__((section (".cygwin_dll_common"), shared)) =
   has_gaa_largeaddress_bug:false,
   has_broken_alloc_console:true,
   has_console_logon_sid:true,
-  has_program_compatibility_assistant:true,
   has_pipe_reject_remote_clients:true,
   terminate_thread_frees_stack:true,
   has_precise_system_time:true,
diff --git a/winsup/cygwin/wincap.h b/winsup/cygwin/wincap.h
index 7d7dbc7..d7ba0ec 100644
--- a/winsup/cygwin/wincap.h
+++ b/winsup/cygwin/wincap.h
@@ -18,7 +18,6 @@ struct wincaps
   unsigned has_gaa_largeaddress_bug			: 1;
   unsigned has_broken_alloc_console			: 1;
   unsigned has_console_logon_sid			: 1;
-  unsigned has_program_compatibility_assistant		: 1;
   unsigned has_pipe_reject_remote_clients		: 1;
   unsigned terminate_thread_frees_stack			: 1;
   unsigned has_precise_system_time			: 1;
@@ -64,7 +63,6 @@ public:
   bool	IMPLEMENT (has_gaa_largeaddress_bug)
   bool	IMPLEMENT (has_broken_alloc_console)
   bool	IMPLEMENT (has_console_logon_sid)
-  bool	IMPLEMENT (has_program_compatibility_assistant)
   bool	IMPLEMENT (has_pipe_reject_remote_clients)
   bool	IMPLEMENT (terminate_thread_frees_stack)
   bool	IMPLEMENT (has_precise_system_time)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]