* 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:
Christopher Faylor 2000-10-24 02:25:27 +00:00
parent 00ee2b44e7
commit 4c45a89744
6 changed files with 27 additions and 8 deletions

View File

@ -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

View File

@ -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);
}

View File

@ -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);

View File

@ -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);

View File

@ -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
{

View File

@ -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.