OSDN Git Service

* select.cc (thread_pipe): Add paranoid check to ensure thread termination.
authorcgf <cgf>
Thu, 18 May 2000 18:32:05 +0000 (18:32 +0000)
committercgf <cgf>
Thu, 18 May 2000 18:32:05 +0000 (18:32 +0000)
* 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.

winsup/cygwin/ChangeLog
winsup/cygwin/external.cc
winsup/cygwin/include/sys/cygwin.h
winsup/cygwin/libc/getopt.c
winsup/cygwin/select.cc
winsup/cygwin/shared.h

index 33cef2e..e0b2dfd 100644 (file)
@@ -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>
 
        * sigproc.h (sigframe): Don't set frame info unless tid matches this
index ccbcb77..11448fd 100644 (file)
@@ -11,7 +11,6 @@ Cygwin license.  Please consult the file "CYGWIN_LICENSE" for
 details. */
 
 #include "winsup.h"
-#include "external.h"
 
 static external_pinfo *
 fillout_pinfo (DWORD pid)
index 3a3dd6e..ff891cc 100644 (file)
@@ -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);
 #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
 };
 #endif
index a5883f0..b09e133 100644 (file)
@@ -154,7 +154,8 @@ getopt_long(nargc, nargv, options, long_options, index)
 
        if ((retval = getopt_internal(nargc, nargv, options)) == -2) {
                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') {
                        return(-1);
index 8d4b34c..08fba12 100644 (file)
@@ -505,6 +505,12 @@ thread_pipe (void *arg)
                goto out;
              }
          }
+      /* Paranoid check */
+      if (pi->stop_thread_pipe)
+       {
+         select_printf ("stopping from outer loop");
+         break;
+       }
       if (gotone)
        break;
       Sleep (10);
index d4f9c5b..ee0aef4 100644 (file)
@@ -144,30 +144,6 @@ public:
 #define ISSTATE(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
 
 class pinfo_list