• Home
  • Raw
  • Download

Lines Matching +full:- +full:- +full:detach +full:- +full:sig

5  * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl>
6 * Copyright (c) 1999-2018 The strace developers.
73 #define my_tkill(tid, sig) syscall(__NR_tkill, (tid), (sig)) argument
100 /* -I n */
105 INTR_NEVER = 3, /* block fatal signals. default if '-o FILE PROG' */
114 * daemonized_tracer supports -D option.
116 * Unlike normal case, with -D *grandparent* process exec's,
119 * attaches to grandparent similarly to strace -p PID.
122 * wait() etc. Without -D, strace process gets lodged in between,
123 * disrupting parent<->child link.
154 /* If -ff, points to stderr. Else, it's our common output log */
177 static void detach(struct tcb *tcp);
179 static void interrupt(int sig);
216 " stack-trace=" USE_UNWINDER in print_version()
219 " stack-demangle" in print_version()
223 " m32-mpers" in print_version()
225 " no-m32-mpers" in print_version()
230 " mx32-mpers" in print_version()
232 " no-mx32-mpers" in print_version()
237 printf("%s -- version %s\n" in print_version()
238 "Copyright (c) 1991-%s The strace developers <%s>.\n" in print_version()
250 usage: strace [-CdffhiqrtttTvVwxxy] [-I n] [-e expr]...\n\ in usage()
251 [-a column] [-o file] [-s strsize] [-P path]...\n\ in usage()
252 -p pid... / [-D] [-E var=val]... [-u username] PROG [ARGS]\n\ in usage()
253 or: strace -c[dfw] [-I n] [-e expr]... [-O overhead] [-S sortby]\n\ in usage()
254 -p pid... / [-D] [-E var=val]... [-u username] PROG [ARGS]\n\ in usage()
257 -a column alignment COLUMN for printing syscall results (default %d)\n\ in usage()
258 -i print instruction pointer at time of syscall\n\ in usage()
262 -k obtain stack trace between each syscall\n\ in usage()
266 -o file send trace output to FILE instead of stderr\n\ in usage()
267 -q suppress messages about attaching, detaching, etc.\n\ in usage()
268 -r print relative timestamp\n\ in usage()
269 -s strsize limit length of print strings to STRSIZE chars (default %d)\n\ in usage()
270 -t print absolute timestamp\n\ in usage()
271 -tt print absolute timestamp with usecs\n\ in usage()
272 -T print time spent in each syscall\n\ in usage()
273 -x print non-ascii strings in hex\n\ in usage()
274 -xx print all strings in hex\n\ in usage()
275 -y print paths associated with file descriptor arguments\n\ in usage()
276 -yy print protocol specific information associated with socket file descriptors\n\ in usage()
279 -c count time, calls, and errors for each syscall and report summary\n\ in usage()
280 -C like -c but also print regular output\n\ in usage()
281 -O overhead set overhead for tracing syscalls to OVERHEAD usecs\n\ in usage()
282 -S sortby sort syscall counts by: time, calls, name, nothing (default %s)\n\ in usage()
283 -w summarise syscall latency (default is system time)\n\ in usage()
286 -e expr a qualifying expression: option=[!]all or option=[!]val1[,val2]...\n\ in usage()
289 -P path trace accesses to path\n\ in usage()
292 -b execve detach on execve syscall\n\ in usage()
293 -D run tracer process as a detached grandchild, not as parent\n\ in usage()
294 -f follow forks\n\ in usage()
295 -ff follow forks with output into separate files\n\ in usage()
296 -I interruptible\n\ in usage()
299 3: fatal signals are always blocked (default if '-o FILE PROG')\n\ in usage()
301 (useful to make 'strace -o FILE PROG' not stop on ^Z)\n\ in usage()
304 -E var remove var from the environment for command\n\ in usage()
305 -E var=val put var=val in the environment for command\n\ in usage()
306 -p pid trace process with process id PID, may be repeated\n\ in usage()
307 -u username run command as username handling setuid and/or setgid\n\ in usage()
310 -d enable debug output to stderr\n\ in usage()
311 -v verbose mode: print unabbreviated argv, stat, termios, etc. args\n\ in usage()
312 -h print help message\n\ in usage()
313 -V print version\n\ in usage()
316 -F -- attempt to follow vforks (deprecated, use -f)\n\ in usage()
319 -z -- print only succeeding syscalls\n\ in usage()
340 error_msg_and_help("invalid -%c argument: '%s'", opt, arg); in error_opt_arg()
364 * Otherwise prints error message and returns -1.
367 ptrace_restart(const unsigned int op, struct tcb *const tcp, unsigned int sig) in ptrace_restart() argument
373 ptrace(op, tcp->pid, 0L, (unsigned long) sig); in ptrace_restart()
383 msg = "DETACH"; in ptrace_restart()
401 if (current_tcp && current_tcp->curcol != 0) { in ptrace_restart()
408 perror_msg("ptrace(PTRACE_%s,pid:%d,sig:%u)", msg, tcp->pid, sig); in ptrace_restart()
409 return -1; in ptrace_restart()
436 kill_save_errno(pid_t pid, int sig) in kill_save_errno() argument
440 (void) kill(pid, sig); in kill_save_errno()
508 execl(_PATH_BSHELL, "sh", "-c", command, NULL); in strace_popen()
525 if (tcp->outf == stderr) in outf_perror()
530 perror_msg("%s.%u", outfname, tcp->pid); in outf_perror()
540 int n = vfprintf(current_tcp->outf, fmt, args); in tvprintf()
545 current_tcp->curcol += n; in tvprintf()
566 int n = fputs_unlocked(str, current_tcp->outf); in tprints()
568 current_tcp->curcol += strlen(str); in tprints()
600 if (fflush(tcp->outf)) in flush_tcp_output()
608 current_tcp->curcol = 0; in line_ended()
612 printing_tcp->curcol = 0; in line_ended()
624 set_personality(current_tcp->currpers); in set_current_tcp()
630 /* If -ff, "previous tcb we printed" is always the same as current, in printleader()
631 * because we have per-tcb output files. in printleader()
638 if (printing_tcp->curcol != 0 && (followfork < 2 || printing_tcp == tcp)) { in printleader()
640 * case 1: we have a shared log (i.e. not -ff), and last line in printleader()
646 printing_tcp->curcol = 0; in printleader()
652 current_tcp->curcol = 0; in printleader()
655 tprintf("%-5d ", tcp->pid); in printleader()
657 tprintf("[pid %5u] ", tcp->pid); in printleader()
708 if (current_tcp->curcol < acolumn) in tabto()
709 tprints(acolumn_spaces + current_tcp->curcol); in tabto()
713 * Otherwise, "strace -oFILE -ff -p<nonexistant_pid>"
719 tcp->flags |= TCB_ATTACHED | TCB_STARTUP | flags; in after_successful_attach()
720 tcp->outf = shared_log; /* if not -ff mode, the same file is for all */ in after_successful_attach()
723 xsprintf(name, "%s.%u", outfname, tcp->pid); in after_successful_attach()
724 tcp->outf = strace_fopen(name); in after_successful_attach()
748 newtcbs = xcalloc(tcbtabsize - old_tcbtabsize, sizeof(newtcbs[0])); in expand_tcbtab()
766 if (!tcp->pid) { in alloctcb()
768 tcp->pid = pid; in alloctcb()
770 tcp->currpers = current_personality; in alloctcb()
774 tcp->pid, nprocs); in alloctcb()
784 return tcp->_priv_data; in get_tcb_priv_data()
791 if (tcp->_priv_data) in set_tcb_priv_data()
792 return -1; in set_tcb_priv_data()
794 tcp->_free_priv_data = free_priv_data; in set_tcb_priv_data()
795 tcp->_priv_data = priv_data; in set_tcb_priv_data()
803 if (tcp->_priv_data) { in free_tcb_priv_data()
804 if (tcp->_free_priv_data) { in free_tcb_priv_data()
805 tcp->_free_priv_data(tcp->_priv_data); in free_tcb_priv_data()
806 tcp->_free_priv_data = NULL; in free_tcb_priv_data()
808 tcp->_priv_data = NULL; in free_tcb_priv_data()
815 if (tcp->pid == 0) in droptcb()
820 free(tcp->inject_vec[p]); in droptcb()
833 if (tcp->mmap_cache) in droptcb()
834 tcp->mmap_cache->free_fn(tcp, __func__); in droptcb()
836 nprocs--; in droptcb()
837 debug_msg("dropped tcb for pid %d, %d remain", tcp->pid, nprocs); in droptcb()
839 if (tcp->outf) { in droptcb()
841 if (tcp->curcol != 0) in droptcb()
842 fprintf(tcp->outf, " <detached ...>\n"); in droptcb()
843 fclose(tcp->outf); in droptcb()
845 if (printing_tcp == tcp && tcp->curcol != 0) in droptcb()
846 fprintf(tcp->outf, " <detached ...>\n"); in droptcb()
859 /* Detach traced process.
860 * Never call DETACH twice on the same process as both unattached and
861 * attached-unstopped processes give the same ESRCH. For unattached process we
865 detach(struct tcb *tcp) in detach() function
876 if (!(tcp->flags & TCB_ATTACHED)) in detach()
883 if (tcp->flags & TCB_IGNORE_ONE_SIGSTOP) in detach()
886 error = ptrace(PTRACE_DETACH, tcp->pid, 0, 0); in detach()
893 perror_func_msg("ptrace(PTRACE_DETACH,%u)", tcp->pid); in detach()
897 if (my_tkill(tcp->pid, 0) < 0) { in detach()
900 perror_func_msg("tkill(%u,0)", tcp->pid); in detach()
907 * With SEIZE, tracee can be in group-stop already. in detach()
910 * Testcase: trying to ^C a "strace -p <stopped_process>". in detach()
912 error = ptrace(PTRACE_INTERRUPT, tcp->pid, 0, 0); in detach()
916 perror_func_msg("ptrace(PTRACE_INTERRUPT,%u)", tcp->pid); in detach()
918 error = my_tkill(tcp->pid, SIGSTOP); in detach()
922 perror_func_msg("tkill(%u,SIGSTOP)", tcp->pid); in detach()
934 unsigned int sig; in detach() local
935 if (waitpid(tcp->pid, &status, __WALL) < 0) { in detach()
943 perror_func_msg("waitpid(%u)", tcp->pid); in detach()
951 * Consider "strace -p PID" being ^C-ed: in detach()
952 * we want merely to detach from PID. in detach()
959 sig = WSTOPSIG(status); in detach()
960 debug_msg("detach wait: event:%d sig:%d", in detach()
961 (unsigned) status >> 16, sig); in detach()
964 if (event == PTRACE_EVENT_STOP /*&& sig == SIGTRAP*/) { in detach()
966 * sig == SIGTRAP: PTRACE_INTERRUPT stop. in detach()
967 * sig == other: process was already stopped in detach()
968 * with this stopping sig (see tests/detach-stopped). in detach()
969 * Looks like re-injecting this sig is not necessary in detach()
970 * in DETACH for the tracee to remain stopped. in detach()
972 sig = 0; in detach()
976 * the above event if other ptrace-stop is pending. in detach()
977 * See tests/detach-sleeping testcase: in detach()
982 * if we would CONT now. Need to DETACH. in detach()
984 if (sig == syscall_trap_sig) in detach()
985 sig = 0; in detach()
989 ptrace_restart(PTRACE_DETACH, tcp, sig); in detach()
994 if (sig == SIGSTOP) { in detach()
995 /* Detach, suppressing SIGSTOP */ in detach()
999 if (sig == syscall_trap_sig) in detach()
1000 sig = 0; in detach()
1001 /* Can't detach just yet, may need to wait for SIGSTOP */ in detach()
1002 error = ptrace_restart(PTRACE_CONT, tcp, sig); in detach()
1013 if (!qflag && (tcp->flags & TCB_ATTACHED)) in detach()
1014 error_msg("Process %u detached", tcp->pid); in detach()
1024 * We accept -p PID,PID; -p "`pidof PROG`"; -p "`pgrep PROG`". in process_opt_p_list()
1050 if (ptrace_attach_or_seize(tcp->pid) < 0) { in attach_tcb()
1052 ptrace_attach_cmd, tcp->pid); in attach_tcb()
1058 debug_msg("attach to pid %d (main) succeeded", tcp->pid); in attach_tcb()
1065 if (followfork && tcp->pid != strace_child && in attach_tcb()
1066 xsprintf(procdir, task_path, tcp->pid) > 0 && in attach_tcb()
1071 if (de->d_fileno == 0) in attach_tcb()
1074 int tid = string_to_uint(de->d_name); in attach_tcb()
1075 if (tid <= 0 || tid == tcp->pid) in attach_tcb()
1098 tcp->pid, ntid - nerr + 1); in attach_tcb()
1101 tcp->pid); in attach_tcb()
1135 if (!tcp->pid) in startup_attach()
1139 if (tcp->flags & TCB_ATTACHED) in startup_attach()
1142 if (tcp->pid == parent_pid || tcp->pid == strace_tracer_pid) { in startup_attach()
1144 perror_msg("attach: pid %d", tcp->pid); in startup_attach()
1165 /* Stack-o-phobic exec helper, in the hope to work around
1183 if (params->fd_to_close >= 0) in exec_or_die()
1184 close(params->fd_to_close); in exec_or_die()
1199 if (setregid(run_gid, params->run_egid) < 0) { in exec_or_die()
1202 if (setreuid(run_uid, params->run_euid) < 0) { in exec_or_die()
1231 execv(params->pathname, params->argv); in exec_or_die()
1312 if (filename_len > sizeof(pathname) - 1) { in startup_child()
1335 n = colon - path; in startup_child()
1343 } else if (n > sizeof(pathname) - 1) in startup_child()
1349 if (len && pathname[len - 1] != '/') in startup_child()
1351 if (filename_len + len > sizeof(pathname) - 1) in startup_child()
1369 params_for_tracee.fd_to_close = (shared_log != stderr) ? fileno(shared_log) : -1; in startup_child()
1392 * -D: we are parent in startup_child()
1393 * not -D: we are child in startup_child()
1438 /* With -D, we are *child* here, the tracee is our parent. */ in startup_child()
1442 tcp->flags |= TCB_SKIP_DETACH_ON_FIRST_EXEC | TCB_HIDE_LOG; in startup_child()
1448 /* NOMMU BUG! -D mode is active, we (child) return, in startup_child()
1471 * { sleep 1; yes | head -n99999; } | strace -o/dev/null sh -c 'exec <&-; sleep 9' in startup_child()
1541 /* u.release has this form: "3.2.9[-some-garbage]" */ in get_os_release()
1547 /* Note: this open-codes KERNEL_VERSION(): */ in get_os_release()
1555 /* "X.Y-something" means "X.Y.0" */ in get_os_release()
1623 error_msg_and_die("Syscall '%s' for -b isn't supported", in init()
1629 error_msg_and_help("-c and -C are mutually exclusive"); in init()
1635 error_msg_and_help("-c and -C are mutually exclusive"); in init()
1665 opt_intr = string_to_uint_upto(optarg, NUM_INTR_OPTS - 1); in init()
1697 if (i < 0 || (unsigned int) i > -1U / 4) in init()
1749 argc -= optind; in init()
1752 error_msg_and_help("must have PROG [ARGS] or -p PID"); in init()
1756 error_msg_and_help("PROG [ARGS] must be specified with -D"); in init()
1761 error_msg("deprecated option -F ignored"); in init()
1763 error_msg("option -F is deprecated, " in init()
1764 "please use -f instead"); in init()
1770 error_msg_and_help("(-c or -C) and -ff are mutually exclusive"); in init()
1774 error_msg_and_help("-w must be given with (-c or -C)"); in init()
1779 error_msg("-%c has no effect with -c", 'i'); in init()
1782 error_msg("-%c has no effect with -c", 'k'); in init()
1785 error_msg("-%c has no effect with -c", 'r'); in init()
1787 error_msg("-%c has no effect with -c", 't'); in init()
1789 error_msg("-%c has no effect with -c", 'T'); in init()
1791 error_msg("-%c has no effect with -c", 'y'); in init()
1810 error_msg_and_die("You must be root to use the -u option"); in init()
1816 run_uid = pent->pw_uid; in init()
1817 run_gid = pent->pw_gid; in init()
1831 * Is something weird with our stdin and/or stdout - in init()
1836 * was set to "|/bin/strace -o/tmp/LOG PROG": in init()
1852 error_msg_and_help("piping the output and -ff " in init()
1857 } else if (strlen(outfname) >= PATH_MAX - sizeof(int) * 3) { in init()
1862 /* -ff without -o FILE is the same as single -f */ in init()
1872 * argv[0] -pPID -oFILE Default interactive setting in init()
1904 * In interactive mode (if no -o OUTFILE, or -p PID is used), in init()
1907 * In non-interactive mode these signals are ignored. in init()
1924 /* Do we want pids printed in our -o OUTFILE? in init()
1925 * -ff: no (every pid has its own file); or in init()
1926 * -f: yes (there can be more pids in the future); or in init()
1927 * -p PID1,PID2: yes (there are already more than one pid) in init()
1939 #define PID2TCB_CACHE_MASK (PID2TCB_CACHE_SIZE - 1) in pid2tcb()
1945 if (tcp && tcp->pid == pid) in pid2tcb()
1950 if (tcp->pid == pid) in pid2tcb()
1971 if (!tcp->pid) in cleanup()
1973 debug_func_msg("looking at pid %u", tcp->pid); in cleanup()
1974 if (tcp->pid == strace_child) { in cleanup()
1975 kill(tcp->pid, SIGCONT); in cleanup()
1976 kill(tcp->pid, fatal_sig); in cleanup()
1978 detach(tcp); in cleanup()
1985 interrupt(int sig) in interrupt() argument
1987 interrupted = sig; in interrupt()
2004 xsprintf(buf, "WIFSIGNALED,sig=%s", in print_debug_info()
2010 xsprintf(buf, "WIFSTOPPED,sig=%s", signame(WSTOPSIG(status))); in print_debug_info()
2037 /* example: strace -bexecve sh -c 'exec true' */ in maybe_allocate_tcb()
2059 * There used to be a dance around possible re-injection of in maybe_allocate_tcb()
2061 * observable stop here is the initial ptrace-stop. in maybe_allocate_tcb()
2088 if (execve_thread->curcol != 0) { in maybe_switch_tcbs()
2090 * One case we are here is -ff: in maybe_switch_tcbs()
2091 * try "strace -oLOG -ff test/threaded_execve" in maybe_switch_tcbs()
2093 fprintf(execve_thread->outf, " <pid changed to %d ...>\n", pid); in maybe_switch_tcbs()
2094 /*execve_thread->curcol = 0; - no need, see code below */ in maybe_switch_tcbs()
2096 /* Swap output FILEs (needed for -ff) */ in maybe_switch_tcbs()
2097 fp = execve_thread->outf; in maybe_switch_tcbs()
2098 execve_thread->outf = tcp->outf; in maybe_switch_tcbs()
2099 tcp->outf = fp; in maybe_switch_tcbs()
2101 execve_thread->curcol = tcp->curcol; in maybe_switch_tcbs()
2102 tcp->curcol = 0; in maybe_switch_tcbs()
2103 /* Drop leader, but close execve'd thread outfile (if -ff) */ in maybe_switch_tcbs()
2107 tcp->pid = pid; in maybe_switch_tcbs()
2112 tcp->flags |= TCB_REPRINT; in maybe_switch_tcbs()
2158 print_stopped(struct tcb *tcp, const siginfo_t *si, const unsigned int sig) in print_stopped() argument
2162 && is_number_in_set(sig, signal_set)) { in print_stopped()
2165 tprintf("--- %s ", signame(sig)); in print_stopped()
2167 tprints(" ---\n"); in print_stopped()
2169 tprintf("--- stopped by %s ---\n", signame(sig)); in print_stopped()
2182 debug_msg("pid %d has TCB_STARTUP, initializing it", tcp->pid); in startup_tcb()
2184 tcp->flags &= ~TCB_STARTUP; in startup_tcb()
2188 ptrace_setoptions, tcp->pid); in startup_tcb()
2189 if (ptrace(PTRACE_SETOPTIONS, tcp->pid, NULL, ptrace_setoptions) < 0) { in startup_tcb()
2197 if ((tcp->flags & TCB_GRABBED) && (get_scno(tcp) == 1)) in startup_tcb()
2198 tcp->s_prev_ent = tcp->s_ent; in startup_tcb()
2210 && printing_tcp->curcol != 0) { in print_event_exit()
2214 printing_tcp->curcol = 0; in print_event_exit()
2219 || (tcp->flags & TCB_REPRINT)) { in print_event_exit()
2220 tcp->flags &= ~TCB_REPRINT; in print_event_exit()
2222 tprintf("<... %s resumed>", tcp->s_ent->sys_name); in print_event_exit()
2225 if (!(tcp->sys_func_rval & RVAL_DECODED)) { in print_event_exit()
2257 * under strace -f, parent sometimes (rarely) manages in next_event()
2266 /* However, if -o|logger is in use, we can't do that. in next_event()
2267 * Can work around that by double-forking the logger, in next_event()
2295 pid = wait4(-1, &status, __WALL, (cflag ? &ru : NULL)); in next_event()
2314 wd->te = TE_NEXT; in next_event()
2327 wd->status = status; in next_event()
2332 wd->te = TE_NEXT; in next_event()
2345 wd->te = TE_NEXT; in next_event()
2360 ts_sub(&tcp->dtime, &stime, &tcp->stime); in next_event()
2361 tcp->stime = stime; in next_event()
2365 wd->te = TE_SIGNALLED; in next_event()
2370 wd->te = TE_EXITED; in next_event()
2381 if (tcp->flags & TCB_STARTUP) in next_event()
2384 const unsigned int sig = WSTOPSIG(status); in next_event() local
2390 * Is this post-attach SIGSTOP? in next_event()
2396 if (sig == SIGSTOP && (tcp->flags & TCB_IGNORE_ONE_SIGSTOP)) { in next_event()
2397 debug_func_msg("ignored SIGSTOP on pid %d", tcp->pid); in next_event()
2398 tcp->flags &= ~TCB_IGNORE_ONE_SIGSTOP; in next_event()
2399 wd->te = TE_RESTART; in next_event()
2400 } else if (sig == syscall_trap_sig) { in next_event()
2401 wd->te = TE_SYSCALL_STOP; in next_event()
2403 memset(&wd->si, 0, sizeof(wd->si)); in next_event()
2410 bool stopped = ptrace(PTRACE_GETSIGINFO, pid, 0, &wd->si) < 0; in next_event()
2411 wd->te = stopped ? TE_GROUP_STOP : TE_SIGNAL_DELIVERY_STOP; in next_event()
2416 * PTRACE_INTERRUPT-stop or group-stop. in next_event()
2417 * PTRACE_INTERRUPT-stop has sig == SIGTRAP here. in next_event()
2419 switch (sig) { in next_event()
2424 wd->te = TE_GROUP_STOP; in next_event()
2427 wd->te = TE_RESTART; in next_event()
2431 wd->te = TE_STOP_BEFORE_EXECVE; in next_event()
2434 wd->te = TE_STOP_BEFORE_EXIT; in next_event()
2437 wd->te = TE_RESTART; in next_event()
2444 trace_syscall(struct tcb *tcp, unsigned int *sig) in trace_syscall() argument
2452 res = syscall_entering_trace(tcp, sig); in trace_syscall()
2473 enum trace_event te = wd ? wd->te : TE_BREAK; in dispatch_event()
2475 * Copy wd->status to a non-const variable to workaround glibc bugs in dispatch_event()
2476 * around union wait fixed by glibc commit glibc-2.24~391 in dispatch_event()
2478 int status = wd ? wd->status : 0; in dispatch_event()
2494 * Likely a result of process disappearing mid-flight. in dispatch_event()
2498 * We used to detach(current_tcp) here, but since we no in dispatch_event()
2499 * longer implement "detach before death" policy/hack, in dispatch_event()
2509 print_stopped(current_tcp, &wd->si, restart_sig); in dispatch_event()
2513 print_signalled(current_tcp, current_tcp->pid, status); in dispatch_event()
2522 * This ends ptrace-stop, but does *not* end group-stop. in dispatch_event()
2533 print_exited(current_tcp, current_tcp->pid, status); in dispatch_event()
2551 current_tcp->pid); in dispatch_event()
2553 current_tcp->flags |= TCB_RECOVERING; in dispatch_event()
2555 current_tcp->flags &= ~TCB_RECOVERING; in dispatch_event()
2580 current_tcp->pid)); in dispatch_event()
2583 if (current_tcp->flags & TCB_SKIP_DETACH_ON_FIRST_EXEC) { in dispatch_event()
2584 current_tcp->flags &= ~TCB_SKIP_DETACH_ON_FIRST_EXEC; in dispatch_event()
2586 detach(current_tcp); /* do "-b execve" thingy */ in dispatch_event()
2618 debug_func_msg("pid %d", tcp->pid); in restart_delayed_tcb()
2620 tcp->flags &= ~TCB_DELAYED; in restart_delayed_tcb()
2641 if (tcp->pid && syscall_delayed(tcp)) { in restart_delayed_tcbs()
2642 if (ts_cmp(&ts_now, &tcp->delay_expiration_time) > 0) { in restart_delayed_tcbs()
2648 ts_cmp(&tcp_next->delay_expiration_time, in restart_delayed_tcbs()
2649 &tcp->delay_expiration_time) > 0) { in restart_delayed_tcbs()
2668 timer_sighandler(int sig) in timer_sighandler() argument
2720 /* Paranoia - what if this signal is not fatal? in terminate()