* exceptions.cc (signal_exit): Kill any executing child process if we're dying.
* path.h: Remove unneeded extern. * spawn.cc (std_suffixes): Make static. Don't set dwProcessId here since it makes the process unsignalable. Set strace flag that this is an execed process stub. * strace.cc (strace::vsprntf): Use strace flag to indicate when to visually flag that this is an exec stub. * include/sys/strace.h (strace): Add 'execing' flag.
This commit is contained in:
		@@ -1,3 +1,15 @@
 | 
			
		||||
Mon Oct 23 21:47:55 2000  Christopher Faylor <cgf@cygnus.com>
 | 
			
		||||
 | 
			
		||||
	* exceptions.cc (signal_exit): Kill any executing child process if
 | 
			
		||||
	we're dying.
 | 
			
		||||
	* path.h: Remove unneeded extern.
 | 
			
		||||
	* spawn.cc (std_suffixes): Make static.  Don't set dwProcessId here
 | 
			
		||||
	since it makes the process unsignalable.  Set strace flag that this is
 | 
			
		||||
	an execed process stub.
 | 
			
		||||
	* strace.cc (strace::vsprntf): Use strace flag to indicate when to
 | 
			
		||||
	visually flag that this is an exec stub.
 | 
			
		||||
	* include/sys/strace.h (strace): Add 'execing' flag.
 | 
			
		||||
 | 
			
		||||
Mon Oct 23 16:43:33 2000  Christopher Faylor <cgf@cygnus.com>
 | 
			
		||||
 | 
			
		||||
	* sigproc.cc (proc_subproc): Don't send a false positive if WNOHANG and
 | 
			
		||||
 
 | 
			
		||||
@@ -1017,6 +1017,8 @@ exit_sig:
 | 
			
		||||
static void
 | 
			
		||||
signal_exit (int rc)
 | 
			
		||||
{
 | 
			
		||||
  extern HANDLE hExeced;
 | 
			
		||||
 | 
			
		||||
  rc = EXIT_SIGNAL | (rc << 8);
 | 
			
		||||
  if (exit_already++)
 | 
			
		||||
    myself->exit (rc);
 | 
			
		||||
@@ -1035,6 +1037,9 @@ signal_exit (int rc)
 | 
			
		||||
  user_data->resourcelocks->Delete ();
 | 
			
		||||
  user_data->resourcelocks->Init ();
 | 
			
		||||
 | 
			
		||||
  if (hExeced)
 | 
			
		||||
    TerminateProcess (hExeced, rc);
 | 
			
		||||
 | 
			
		||||
  do_exit (rc);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -30,6 +30,7 @@ public:
 | 
			
		||||
  int version;
 | 
			
		||||
  int active;
 | 
			
		||||
  int lmicrosec;
 | 
			
		||||
  int execing;
 | 
			
		||||
  strace() : version(1) {}
 | 
			
		||||
  void prntf (unsigned, const char *func, const char *, ...);
 | 
			
		||||
  void wm (int message, int word, int lon);
 | 
			
		||||
 
 | 
			
		||||
@@ -103,8 +103,6 @@ class path_conv
 | 
			
		||||
/* Maximum depth of symlinks (after which ELOOP is issued).  */
 | 
			
		||||
#define MAX_LINK_DEPTH 10
 | 
			
		||||
 | 
			
		||||
extern suffix_info std_suffixes[];
 | 
			
		||||
 | 
			
		||||
int __stdcall get_device_number (const char *name, int &unit, BOOL from_conv = FALSE);
 | 
			
		||||
int __stdcall slash_unc_prefix_p (const char *path);
 | 
			
		||||
int __stdcall check_null_empty_path (const char *name);
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,7 @@ details. */
 | 
			
		||||
 | 
			
		||||
#define LINE_BUF_CHUNK (MAX_PATH * 2)
 | 
			
		||||
 | 
			
		||||
suffix_info std_suffixes[] =
 | 
			
		||||
static suffix_info std_suffixes[] =
 | 
			
		||||
{
 | 
			
		||||
  suffix_info (".exe", 1), suffix_info ("", 1),
 | 
			
		||||
  suffix_info (".com"), suffix_info (".cmd"),
 | 
			
		||||
@@ -45,6 +45,8 @@ suffix_info std_suffixes[] =
 | 
			
		||||
  suffix_info (NULL)
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
HANDLE hExeced;
 | 
			
		||||
 | 
			
		||||
/* Add .exe to PROG if not already present and see if that exists.
 | 
			
		||||
   If not, return PROG (converted from posix to win32 rules if necessary).
 | 
			
		||||
   The result is always BUF.
 | 
			
		||||
@@ -671,7 +673,8 @@ skip_arg_parsing:
 | 
			
		||||
      /* These are both duplicated in the child code.  We do this here,
 | 
			
		||||
	 primarily for strace. */
 | 
			
		||||
      strcpy (myself->progname, real_path);
 | 
			
		||||
      myself->dwProcessId = pi.dwProcessId;
 | 
			
		||||
      strace.execing = 1;
 | 
			
		||||
      hExeced = pi.hProcess;
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -133,10 +133,8 @@ strace::vsprntf (char *buf, const char *func, const char *infmt, va_list ap)
 | 
			
		||||
      if ((p = strrchr (progname, '.')) != NULL && strcasematch (p, ".exe"))
 | 
			
		||||
	*p = '\000';
 | 
			
		||||
      p = progname;
 | 
			
		||||
      count = __small_sprintf (buf, fmt, p && *p ? p : "?",
 | 
			
		||||
			       myself->pid,
 | 
			
		||||
			       myself->dwProcessId != GetCurrentProcessId ()
 | 
			
		||||
			       ? "!" : "");
 | 
			
		||||
      count = __small_sprintf (buf, fmt, p && *p ? p : "?", myself->pid,
 | 
			
		||||
			       execing ? "!" : "");
 | 
			
		||||
      if (func)
 | 
			
		||||
	count += getfunc (buf + count, func);
 | 
			
		||||
    }
 | 
			
		||||
@@ -177,6 +175,8 @@ strace::write (unsigned category, const char *buf, int count)
 | 
			
		||||
  __small_sprintf (outbuf, "cYg%08x", strlen (outstuff) + 1);
 | 
			
		||||
  outstuff[-1] = ' ';
 | 
			
		||||
  OutputDebugString (outbuf);
 | 
			
		||||
#undef outstuff
 | 
			
		||||
#undef PREFIX
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Printf function used when tracing system calls.
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user