Cygwin: pty: Add a workaround for issue of starting a lot of mintty.
- If a lot of mintty are started in a short time from a mintty, some
  of them hang with empty screen, crash immediately or hang on exiting
  mintty. The following report seems to be related to this issue.
    https://cygwin.com/pipermail/cygwin/2020-August/245751.html
  The cause is not clear at all, but this patch seems to solve the
  issue.
			
			
This commit is contained in:
		
				
					committed by
					
						 Corinna Vinschen
						Corinna Vinschen
					
				
			
			
				
	
			
			
			
						parent
						
							a44bc679a4
						
					
				
				
					commit
					f14d123ac6
				
			| @@ -177,7 +177,7 @@ find_exec (const char *name, path_conv& buf, const char *search, | ||||
| /* Utility for child_info_spawn::worker.  */ | ||||
|  | ||||
| static HANDLE | ||||
| handle (int fd, bool writing) | ||||
| handle (int fd, bool writing, bool iscygwin) | ||||
| { | ||||
|   HANDLE h; | ||||
|   cygheap_fdget cfd (fd); | ||||
| @@ -188,6 +188,11 @@ handle (int fd, bool writing) | ||||
|     h = INVALID_HANDLE_VALUE; | ||||
|   else if (!writing) | ||||
|     h = cfd->get_handle (); | ||||
|   else if (cfd->get_major () == DEV_PTYS_MAJOR && iscygwin) | ||||
|     { | ||||
|       fhandler_pty_slave *ptys = (fhandler_pty_slave *)(fhandler_base *) cfd; | ||||
|       h = ptys->get_output_handle_cyg (); | ||||
|     } | ||||
|   else | ||||
|     h = cfd->get_output_handle (); | ||||
|  | ||||
| @@ -625,9 +630,11 @@ child_info_spawn::worker (const char *prog_arg, const char *const *argv, | ||||
|  | ||||
|       /* Set up needed handles for stdio */ | ||||
|       si.dwFlags = STARTF_USESTDHANDLES; | ||||
|       si.hStdInput = handle ((in__stdin < 0 ? 0 : in__stdin), false); | ||||
|       si.hStdOutput = handle ((in__stdout < 0 ? 1 : in__stdout), true); | ||||
|       si.hStdError = handle (2, true); | ||||
|       si.hStdInput = handle ((in__stdin < 0 ? 0 : in__stdin), false, | ||||
| 			     iscygwin ()); | ||||
|       si.hStdOutput = handle ((in__stdout < 0 ? 1 : in__stdout), true, | ||||
| 			      iscygwin ()); | ||||
|       si.hStdError = handle (2, true, iscygwin ()); | ||||
|  | ||||
|       si.cb = sizeof (si); | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user