Revision: 22963 http://trac.macosforge.org/projects/launchd/changeset/22963 Author: zarzycki@apple.com Date: 2006-12-04 08:51:34 -0800 (Mon, 04 Dec 2006) Log Message: ----------- <rdar://problem/4860735> CrashTracer: 6 crashes in launchd at launchd: main + 1672 Modified Paths: -------------- trunk/launchd/src/launchd.c Modified: trunk/launchd/src/launchd.c =================================================================== --- trunk/launchd/src/launchd.c 2006-11-29 22:10:38 UTC (rev 22962) +++ trunk/launchd/src/launchd.c 2006-12-04 16:51:34 UTC (rev 22963) @@ -98,6 +98,7 @@ static bool get_network_state(void); static void monitor_networking_state(void); static void fatal_signal_handler(int sig, siginfo_t *si, void *uap); +static void handle_pid1_crashes_separately(void); static bool re_exec_in_single_user_mode = false; static char *pending_stdout = NULL; @@ -121,7 +122,6 @@ SIGTTIN, SIGTTOU, SIGIO, SIGXCPU, SIGXFSZ, SIGVTALRM, SIGPROF, SIGWINCH, SIGINFO, SIGUSR1, SIGUSR2 }; - struct sigaction fsa; bool sflag = false, dflag = false, Dflag = false; char ldconf[PATH_MAX] = PID1LAUNCHD_CONF; const char *h = getenv("HOME"); @@ -301,23 +301,35 @@ job_dispatch(fbj, true); } - if (getpid() == 1 && !job_active(rlcj)) { - init_pre_kevent(); + if (getpid() == 1) { + handle_pid1_crashes_separately(); + + if (!job_active(rlcj)) { + init_pre_kevent(); + } } + launchd_runtime(); +} + +void +handle_pid1_crashes_separately(void) +{ + struct sigaction fsa; + switch (setjmp(doom_doom_doom)) { - case SIGILL: - case SIGFPE: - syslog(LOG_EMERG, "We crashed at instruction: %p", crash_addr); - abort(); - case SIGBUS: - case SIGSEGV: - syslog(LOG_EMERG, "We crashed trying to read/write: %p", crash_addr); - abort(); - default: - abort(); - case 0: - break; + case SIGILL: + case SIGFPE: + syslog(LOG_EMERG, "We crashed at instruction: %p", crash_addr); + abort(); + case SIGBUS: + case SIGSEGV: + syslog(LOG_EMERG, "We crashed trying to read/write: %p", crash_addr); + abort(); + default: + abort(); + case 0: + break; } fsa.sa_sigaction = fatal_signal_handler; @@ -328,8 +340,6 @@ launchd_assumes(sigaction(SIGFPE, &fsa, NULL) != -1); launchd_assumes(sigaction(SIGBUS, &fsa, NULL) != -1); launchd_assumes(sigaction(SIGSEGV, &fsa, NULL) != -1); - - launchd_runtime(); } void
participants (1)
-
source_changes@macosforge.org