void sig_init(void) { clk_tck_init(); timer_save_interval = cfg_get_int(SECTION_OPTIONS, NULL, "Save"); if (timer_save_interval < 0) timer_save_interval = TIMER_SAVE_DELAY; else if ((timer_save_interval /= TIMER_INTERVAL) <= 0) timer_save_interval = 1; timer_save_value = timer_save_interval; timer_ticksafety_interval = (clock_t)1 << (sizeof(clock_t) * 8 - 4); timer_ticksafety_interval /= clk_tck; if ((timer_ticksafety_interval /= TIMER_INTERVAL) <= 0) timer_ticksafety_interval = 1; timer_ticksafety_value = timer_ticksafety_interval; atexit(sig_done); sig_install_update(); sig_install_abort(); sig_install_timer(); #if OS_FORK signal(SIGUSR2, sig_handle_status); #endif }
void sig_init(void) { clk_tck_init(); timer_save_interval = cfg_get_int(SECTION_OPTIONS, NULL, "Save"); if (timer_save_interval < 0) timer_save_interval = TIMER_SAVE_DELAY; else if ((timer_save_interval /= TIMER_INTERVAL) <= 0) timer_save_interval = 1; if (cfg_get_param(SECTION_OPTIONS, NULL, "AbortGraceTime")) { abort_grace_time = cfg_get_int(SECTION_OPTIONS, NULL, "AbortGraceTime"); } #if OS_TIMER timer_save_value = timer_save_interval; #elif !defined(BENCH_BUILD) timer_save_value = status_get_time() + timer_save_interval; #endif timer_ticksafety_interval = (clock_t)1 << (sizeof(clock_t) * 8 - 4); timer_ticksafety_interval /= clk_tck; if ((timer_ticksafety_interval /= TIMER_INTERVAL) <= 0) timer_ticksafety_interval = 1; timer_ticksafety_value = timer_ticksafety_interval; atexit(sig_done); sig_install(sig_handle_update, SIGHUP); sig_install_abort(); sig_install_timer(); }
static void sig_handle_timer(int signum) { int saved_errno = errno; if (!--timer_save_value) { timer_save_value = timer_save_interval; event_save = event_pending = 1; } if (!--timer_ticksafety_value) { timer_ticksafety_value = timer_ticksafety_interval; event_ticksafety = event_pending = 1; } if (sig_getchar() >= 0) { while (sig_getchar() >= 0); event_status = event_pending = 1; } #if !OS_TIMER signal(SIGALRM, sig_handle_timer); #elif !defined(SA_RESTART) && !defined(__DJGPP__) sig_install_timer(); #endif errno = saved_errno; }
static void sig_handle_timer(int signum) { int saved_errno = errno; if (!--timer_save_value) { timer_save_value = timer_save_interval; event_save = event_pending = 1; } if (!--timer_ticksafety_value) { timer_ticksafety_value = timer_ticksafety_interval; event_ticksafety = event_pending = 1; } if (john_main_process) { int c; #if OS_FORK int new_abort = 0, new_status = 0; #endif while ((c = tty_getchar()) >= 0) { if (c == 3 || c == 'q') { #if OS_FORK new_abort = 1; #endif sig_handle_abort(0); } else { #if OS_FORK new_status = 1; #endif event_status = event_pending = 1; } } #if OS_FORK if (new_abort || new_status) signal_children(new_abort ? SIGTERM : SIGUSR2); #endif } #if !OS_TIMER signal(SIGALRM, sig_handle_timer); #elif !defined(SA_RESTART) && !defined(__DJGPP__) sig_install_timer(); #endif errno = saved_errno; }
static void sig_handle_timer(int signum) { int saved_errno = errno; #if !OS_TIMER unsigned int time; #endif #ifndef BENCH_BUILD #if OS_TIMER /* Some stuff only done every few seconds */ if (timer_save_interval < 4 || ((timer_save_interval - timer_save_value) & 3) == 3) { #ifdef HAVE_MPI if (!event_reload && mpi_p > 1) { event_pending = event_mpiprobe = 1; } #endif event_poll_files = event_pending = 1; #ifdef SIGUSR2 sig_install(sig_handle_reload, SIGUSR2); #endif } if (!--timer_save_value) { timer_save_value = timer_save_interval; event_save = event_pending = 1; event_reload = options.reload_at_save; } if (timer_abort && !--timer_abort) { aborted_by_timer = 1; if (abort_grace_time > 0) timer_abort = abort_grace_time; else if (abort_grace_time < 0) timer_abort = 0; else /* no grace time, kill immediately */ event_abort = 1; sig_handle_abort(0); } if (timer_status && !--timer_status) { timer_status = options.status_interval; event_status = event_pending = 1; } #else /* no OS_TIMER */ time = status_get_time(); /* Some stuff only done every few seconds */ if ((time & 3) == 3) { #ifdef HAVE_MPI if (!event_reload && mpi_p > 1) { event_pending = event_mpiprobe = 1; } #endif event_poll_files = event_pending = 1; #ifdef SIGUSR2 sig_install(sig_handle_reload, SIGUSR2); #endif } if (time >= timer_save_value) { timer_save_value += timer_save_interval; event_save = event_pending = 1; event_reload = options.reload_at_save; } if (timer_abort && time >= timer_abort) { aborted_by_timer = 1; if (abort_grace_time > 0) timer_abort += abort_grace_time; else if (abort_grace_time < 0) timer_abort = 0; else /* no grace time, kill immediately */ event_abort = 1; sig_handle_abort(0); } if (timer_status && time >= timer_status) { timer_status += options.status_interval; event_status = event_pending = 1; } #endif /* OS_TIMER */ #endif /* !BENCH_BUILD */ if (!--timer_ticksafety_value) { timer_ticksafety_value = timer_ticksafety_interval; event_ticksafety = event_pending = 1; } #ifndef HAVE_MPI if (john_main_process) #endif { int c; #if OS_FORK int new_abort = 0, new_status = 0; #endif while ((c = tty_getchar()) >= 0) { if (c == 3 || c == 'q') { #if OS_FORK new_abort = 1; #endif sig_handle_abort(0); } else { #if OS_FORK new_status = 1; #endif event_status = event_pending = 1; } } #if OS_FORK if (new_abort || new_status) signal_children(new_abort ? SIGTERM : SIGUSR1); #endif } #if !OS_TIMER signal(SIGALRM, sig_handle_timer); #elif !defined(SA_RESTART) && !defined(__DJGPP__) sig_install_timer(); #endif errno = saved_errno; }