* select.cc (thread_pipe): Add paranoid check to ensure thread termination.
* external.cc: Eliminate obsolete include. * getopt.c (getopt_long): Fix compiler warning. * shared.h: Moved PID_ definitions to include/sys/cygwin so that they can be used by external programs. * include/sys/cygwin.h: Move external definitions here. Include sys/resource.h to avoid having to do this everywhere.
This commit is contained in:
		| @@ -1,3 +1,14 @@ | |||||||
|  | Thu May 18 01:28:02 2000  Christopher Faylor <cgf@cygnus.com> | ||||||
|  |  | ||||||
|  | 	* select.cc (thread_pipe): Add paranoid check to ensure thread | ||||||
|  | 	termination. | ||||||
|  | 	* external.cc: Eliminate obsolete include. | ||||||
|  | 	* getopt.c (getopt_long): Fix compiler warning. | ||||||
|  | 	* shared.h: Moved PID_ definitions to include/sys/cygwin so that they | ||||||
|  | 	can be used by external programs. | ||||||
|  | 	* include/sys/cygwin.h: Move external definitions here.  Include | ||||||
|  | 	sys/resource.h to avoid having to do this everywhere. | ||||||
|  |  | ||||||
| Thu May 18 01:04:02 2000  Christopher Faylor <cgf@cygnus.com> | Thu May 18 01:04:02 2000  Christopher Faylor <cgf@cygnus.com> | ||||||
|  |  | ||||||
| 	* sigproc.h (sigframe): Don't set frame info unless tid matches this | 	* sigproc.h (sigframe): Don't set frame info unless tid matches this | ||||||
|   | |||||||
| @@ -11,7 +11,6 @@ Cygwin license.  Please consult the file "CYGWIN_LICENSE" for | |||||||
| details. */ | details. */ | ||||||
|  |  | ||||||
| #include "winsup.h" | #include "winsup.h" | ||||||
| #include "external.h" |  | ||||||
|  |  | ||||||
| static external_pinfo * | static external_pinfo * | ||||||
| fillout_pinfo (DWORD pid) | fillout_pinfo (DWORD pid) | ||||||
|   | |||||||
| @@ -37,6 +37,75 @@ extern int cygwin32_attach_handle_to_fd (char *, int, HANDLE, int, int); | |||||||
| extern int cygwin_attach_handle_to_fd (char *, int, HANDLE, mode_t, unsigned); | extern int cygwin_attach_handle_to_fd (char *, int, HANDLE, mode_t, unsigned); | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | #include <sys/resource.h> | ||||||
|  |  | ||||||
|  | /* External interface stuff */ | ||||||
|  |  | ||||||
|  | typedef enum | ||||||
|  |   { | ||||||
|  |     CW_LOCK_PINFO, | ||||||
|  |     CW_UNLOCK_PINFO, | ||||||
|  |     CW_GETTHREADNAME, | ||||||
|  |     CW_GETPINFO, | ||||||
|  |     CW_SETPINFO, | ||||||
|  |     CW_SETTHREADNAME, | ||||||
|  |     CW_GETVERSIONINFO, | ||||||
|  |     CW_READ_V1_MOUNT_TABLES | ||||||
|  |   } cygwin_getinfo_types; | ||||||
|  |  | ||||||
|  | struct external_pinfo | ||||||
|  |   { | ||||||
|  |   pid_t pid; | ||||||
|  |   pid_t ppid; | ||||||
|  |   HANDLE hProcess; | ||||||
|  |   DWORD dwProcessId, dwSpawnedProcessId; | ||||||
|  |   uid_t uid; | ||||||
|  |   gid_t gid; | ||||||
|  |   pid_t pgid; | ||||||
|  |   pid_t sid; | ||||||
|  |   int ctty; | ||||||
|  |   mode_t umask; | ||||||
|  |  | ||||||
|  |   long start_time; | ||||||
|  |   struct rusage rusage_self; | ||||||
|  |   struct rusage rusage_children; | ||||||
|  |  | ||||||
|  |   char progname[MAX_PATH]; | ||||||
|  |  | ||||||
|  |   DWORD strace_mask; | ||||||
|  |   HANDLE strace_file; | ||||||
|  |  | ||||||
|  |   DWORD process_state; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | DWORD cygwin_internal (cygwin_getinfo_types, ...); | ||||||
|  |  | ||||||
|  | #define CW_NEXTPID 0x80000000	// or with pid to get next one | ||||||
|  |  | ||||||
|  | /* Flags associated with process_state */ | ||||||
|  | enum | ||||||
|  | { | ||||||
|  |   PID_NOT_IN_USE       = 0x0000, // Free entry. | ||||||
|  |   PID_IN_USE	       = 0x0001, // Entry in use. | ||||||
|  |   PID_ZOMBIE	       = 0x0002, // Child exited: no parent wait. | ||||||
|  |   PID_STOPPED	       = 0x0004, // Waiting for SIGCONT. | ||||||
|  |   PID_TTYIN	       = 0x0008, // Waiting for terminal input. | ||||||
|  |   PID_TTYOU	       = 0x0010, // Waiting for terminal output. | ||||||
|  |   PID_ORPHANED	       = 0x0020, // Member of an orphaned process group. | ||||||
|  |   PID_ACTIVE	       = 0x0040, // Pid accepts signals. | ||||||
|  |   PID_CYGPARENT	       = 0x0080, // Set if parent was a cygwin app. | ||||||
|  |   PID_SPLIT_HEAP       = 0x0100, // Set if the heap has been split, | ||||||
|  | 				 //  which means we can't fork again. | ||||||
|  |   PID_CLEAR	       = 0x0200, // Flag that pid should be cleared from parent's | ||||||
|  | 				 //  wait list | ||||||
|  |   PID_SOCKETS_USED     = 0x0400, // Set if process uses Winsock. | ||||||
|  |   PID_INITIALIZING     = 0x0800, // Set until ready to receive signals. | ||||||
|  |   PID_USETTY	       = 0x1000, // Setting this enables or disables cygwin's | ||||||
|  | 				 //  tty support.  This is inherited by | ||||||
|  | 				 //  all execed or forked processes. | ||||||
|  |   PID_REPARENT	       = 0x2000  // child has execed | ||||||
|  | }; | ||||||
|  |  | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| }; | }; | ||||||
| #endif | #endif | ||||||
|   | |||||||
| @@ -154,7 +154,8 @@ getopt_long(nargc, nargv, options, long_options, index) | |||||||
|  |  | ||||||
| 	if ((retval = getopt_internal(nargc, nargv, options)) == -2) { | 	if ((retval = getopt_internal(nargc, nargv, options)) == -2) { | ||||||
| 		char *current_argv = nargv[optind++] + 2, *has_equal; | 		char *current_argv = nargv[optind++] + 2, *has_equal; | ||||||
| 		int i, current_argv_len, match = -1; | 		int i, match = -1; | ||||||
|  | 		size_t current_argv_len; | ||||||
|  |  | ||||||
| 		if (*current_argv == '\0') { | 		if (*current_argv == '\0') { | ||||||
| 			return(-1); | 			return(-1); | ||||||
|   | |||||||
| @@ -505,6 +505,12 @@ thread_pipe (void *arg) | |||||||
| 		goto out; | 		goto out; | ||||||
| 	      } | 	      } | ||||||
| 	  } | 	  } | ||||||
|  |       /* Paranoid check */ | ||||||
|  |       if (pi->stop_thread_pipe) | ||||||
|  | 	{ | ||||||
|  | 	  select_printf ("stopping from outer loop"); | ||||||
|  | 	  break; | ||||||
|  | 	} | ||||||
|       if (gotone) |       if (gotone) | ||||||
| 	break; | 	break; | ||||||
|       Sleep (10); |       Sleep (10); | ||||||
|   | |||||||
| @@ -144,30 +144,6 @@ public: | |||||||
| #define ISSTATE(p, f)	(!!((p)->process_state & f)) | #define ISSTATE(p, f)	(!!((p)->process_state & f)) | ||||||
| #define NOTSTATE(p, f)	(!((p)->process_state & f)) | #define NOTSTATE(p, f)	(!((p)->process_state & f)) | ||||||
|  |  | ||||||
| /* Flags associated with process_state */ |  | ||||||
| enum |  | ||||||
| { |  | ||||||
|   PID_NOT_IN_USE       = 0x0000, // Free entry. |  | ||||||
|   PID_IN_USE	       = 0x0001, // Entry in use. |  | ||||||
|   PID_ZOMBIE	       = 0x0002, // Child exited: no parent wait. |  | ||||||
|   PID_STOPPED	       = 0x0004, // Waiting for SIGCONT. |  | ||||||
|   PID_TTYIN	       = 0x0008, // Waiting for terminal input. |  | ||||||
|   PID_TTYOU	       = 0x0010, // Waiting for terminal output. |  | ||||||
|   PID_ORPHANED	       = 0x0020, // Member of an orphaned process group. |  | ||||||
|   PID_ACTIVE	       = 0x0040, // Pid accepts signals. |  | ||||||
|   PID_CYGPARENT	       = 0x0080, // Set if parent was a cygwin app. |  | ||||||
|   PID_SPLIT_HEAP       = 0x0100, // Set if the heap has been split, |  | ||||||
| 				 //  which means we can't fork again. |  | ||||||
|   PID_CLEAR	       = 0x0200, // Flag that pid should be cleared from parent's |  | ||||||
| 				 //  wait list |  | ||||||
|   PID_SOCKETS_USED     = 0x0400, // Set if process uses Winsock. |  | ||||||
|   PID_INITIALIZING     = 0x0800, // Set until ready to receive signals. |  | ||||||
|   PID_USETTY	       = 0x1000, // Setting this enables or disables cygwin's |  | ||||||
| 				 //  tty support.  This is inherited by |  | ||||||
| 				 //  all execed or forked processes. |  | ||||||
|   PID_REPARENT	       = 0x2000  // child has execed |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| #define PSIZE 128 | #define PSIZE 128 | ||||||
|  |  | ||||||
| class pinfo_list | class pinfo_list | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user