unsigned os_release; /* generated from uname()'s u.release */
static void detach(struct tcb *tcp);
-static void cleanup(void);
+static void cleanup(int sig);
static void interrupt(int sig);
#ifdef HAVE_SIG_ATOMIC_T
die(void)
{
if (strace_tracer_pid == getpid()) {
- cleanup();
+ cleanup(0);
exit(1);
}
}
static void
-cleanup(void)
+cleanup(int fatal_sig)
{
unsigned int i;
struct tcb *tcp;
- int fatal_sig;
- /* 'interrupted' is a volatile object, fetch it only once */
- fatal_sig = interrupted;
if (!fatal_sig)
fatal_sig = SIGTERM;
static void ATTRIBUTE_NORETURN
terminate(void)
{
- cleanup();
+ int sig = interrupted;
+
+ cleanup(sig);
if (cflag)
call_summary(shared_log);
fflush(NULL);
while (waitpid(popen_pid, NULL, 0) < 0 && errno == EINTR)
;
}
- if (interrupted) {
- exit_code = 0x100 | interrupted;
+ if (sig) {
+ exit_code = 0x100 | sig;
}
if (exit_code > 0xff) {
/* Avoid potential core file clobbering. */