* 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>
|
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
|
* sigproc.cc (proc_subproc): Don't send a false positive if WNOHANG and
|
||||||
|
|
|
@ -1017,6 +1017,8 @@ exit_sig:
|
||||||
static void
|
static void
|
||||||
signal_exit (int rc)
|
signal_exit (int rc)
|
||||||
{
|
{
|
||||||
|
extern HANDLE hExeced;
|
||||||
|
|
||||||
rc = EXIT_SIGNAL | (rc << 8);
|
rc = EXIT_SIGNAL | (rc << 8);
|
||||||
if (exit_already++)
|
if (exit_already++)
|
||||||
myself->exit (rc);
|
myself->exit (rc);
|
||||||
|
@ -1035,6 +1037,9 @@ signal_exit (int rc)
|
||||||
user_data->resourcelocks->Delete ();
|
user_data->resourcelocks->Delete ();
|
||||||
user_data->resourcelocks->Init ();
|
user_data->resourcelocks->Init ();
|
||||||
|
|
||||||
|
if (hExeced)
|
||||||
|
TerminateProcess (hExeced, rc);
|
||||||
|
|
||||||
do_exit (rc);
|
do_exit (rc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@ public:
|
||||||
int version;
|
int version;
|
||||||
int active;
|
int active;
|
||||||
int lmicrosec;
|
int lmicrosec;
|
||||||
|
int execing;
|
||||||
strace() : version(1) {}
|
strace() : version(1) {}
|
||||||
void prntf (unsigned, const char *func, const char *, ...);
|
void prntf (unsigned, const char *func, const char *, ...);
|
||||||
void wm (int message, int word, int lon);
|
void wm (int message, int word, int lon);
|
||||||
|
|
|
@ -103,8 +103,6 @@ class path_conv
|
||||||
/* Maximum depth of symlinks (after which ELOOP is issued). */
|
/* Maximum depth of symlinks (after which ELOOP is issued). */
|
||||||
#define MAX_LINK_DEPTH 10
|
#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 get_device_number (const char *name, int &unit, BOOL from_conv = FALSE);
|
||||||
int __stdcall slash_unc_prefix_p (const char *path);
|
int __stdcall slash_unc_prefix_p (const char *path);
|
||||||
int __stdcall check_null_empty_path (const char *name);
|
int __stdcall check_null_empty_path (const char *name);
|
||||||
|
|
|
@ -37,7 +37,7 @@ details. */
|
||||||
|
|
||||||
#define LINE_BUF_CHUNK (MAX_PATH * 2)
|
#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 (".exe", 1), suffix_info ("", 1),
|
||||||
suffix_info (".com"), suffix_info (".cmd"),
|
suffix_info (".com"), suffix_info (".cmd"),
|
||||||
|
@ -45,6 +45,8 @@ suffix_info std_suffixes[] =
|
||||||
suffix_info (NULL)
|
suffix_info (NULL)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
HANDLE hExeced;
|
||||||
|
|
||||||
/* Add .exe to PROG if not already present and see if that exists.
|
/* 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).
|
If not, return PROG (converted from posix to win32 rules if necessary).
|
||||||
The result is always BUF.
|
The result is always BUF.
|
||||||
|
@ -671,7 +673,8 @@ skip_arg_parsing:
|
||||||
/* These are both duplicated in the child code. We do this here,
|
/* These are both duplicated in the child code. We do this here,
|
||||||
primarily for strace. */
|
primarily for strace. */
|
||||||
strcpy (myself->progname, real_path);
|
strcpy (myself->progname, real_path);
|
||||||
myself->dwProcessId = pi.dwProcessId;
|
strace.execing = 1;
|
||||||
|
hExeced = pi.hProcess;
|
||||||
}
|
}
|
||||||
else
|
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"))
|
if ((p = strrchr (progname, '.')) != NULL && strcasematch (p, ".exe"))
|
||||||
*p = '\000';
|
*p = '\000';
|
||||||
p = progname;
|
p = progname;
|
||||||
count = __small_sprintf (buf, fmt, p && *p ? p : "?",
|
count = __small_sprintf (buf, fmt, p && *p ? p : "?", myself->pid,
|
||||||
myself->pid,
|
execing ? "!" : "");
|
||||||
myself->dwProcessId != GetCurrentProcessId ()
|
|
||||||
? "!" : "");
|
|
||||||
if (func)
|
if (func)
|
||||||
count += getfunc (buf + count, 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);
|
__small_sprintf (outbuf, "cYg%08x", strlen (outstuff) + 1);
|
||||||
outstuff[-1] = ' ';
|
outstuff[-1] = ' ';
|
||||||
OutputDebugString (outbuf);
|
OutputDebugString (outbuf);
|
||||||
|
#undef outstuff
|
||||||
|
#undef PREFIX
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Printf function used when tracing system calls.
|
/* Printf function used when tracing system calls.
|
||||||
|
|
Loading…
Reference in New Issue