* 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:
parent
00ee2b44e7
commit
4c45a89744
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue