Only SIGTERM (and SIGINT for standalone programs) shouldn't use it.
cache->ttl_secs = ttl_secs;
cache->neg_ttl_secs = neg_ttl_secs;
- lib_signals_set_handler(SIGHUP, TRUE, sig_auth_cache_clear, cache);
- lib_signals_set_handler(SIGUSR2, TRUE, sig_auth_cache_stats, cache);
+ lib_signals_set_handler(SIGHUP, LIBSIG_FLAGS_SAFE,
+ sig_auth_cache_clear, cache);
+ lib_signals_set_handler(SIGUSR2, LIBSIG_FLAGS_SAFE,
+ sig_auth_cache_stats, cache);
return cache;
}
if (!sigchld_handler_set) {
sigchld_handler_set = TRUE;
- lib_signals_set_handler(SIGCHLD, TRUE, sigchld_handler, NULL);
+ lib_signals_set_handler(SIGCHLD, LIBSIG_FLAGS_SAFE,
+ sigchld_handler, NULL);
}
}
ctx->storage_service = mail_storage_service_init(master_service, NULL,
service_flags);
- lib_signals_set_handler(SIGINT, FALSE, sig_die, NULL);
- lib_signals_set_handler(SIGTERM, FALSE, sig_die, NULL);
+ lib_signals_set_handler(SIGINT, 0, sig_die, NULL);
+ lib_signals_set_handler(SIGTERM, 0, sig_die, NULL);
ctx->v.init(ctx, (const void *)argv);
if (hook_doveadm_mail_init != NULL)
void master_service_init_finish(struct master_service *service)
{
+ enum libsig_flags sigint_flags = LIBSIG_FLAG_DELAYED;
struct stat st;
const char *value;
unsigned int count;
/* set default signal handlers */
lib_signals_init();
- lib_signals_set_handler(SIGINT, TRUE, sig_die, service);
- lib_signals_set_handler(SIGTERM, TRUE, sig_die, service);
+ if ((service->flags & MASTER_SERVICE_FLAG_STANDALONE) == 0)
+ sigint_flags |= LIBSIG_FLAG_RESTART;
+ lib_signals_set_handler(SIGINT, sigint_flags, sig_die, service);
+ lib_signals_set_handler(SIGTERM, LIBSIG_FLAG_DELAYED, sig_die, service);
if ((service->flags & MASTER_SERVICE_FLAG_TRACK_LOGIN_STATE) != 0) {
- lib_signals_set_handler(SIGUSR1, TRUE,
+ lib_signals_set_handler(SIGUSR1, LIBSIG_FLAGS_SAFE,
sig_state_changed, service);
}
child_pids = hash_table_create(default_pool, default_pool, 0,
NULL, NULL);
- lib_signals_set_handler(SIGCHLD, TRUE, sigchld_handler, NULL);
+ lib_signals_set_handler(SIGCHLD, LIBSIG_FLAGS_SAFE,
+ sigchld_handler, NULL);
}
void child_wait_deinit(void)
static void main_init(void)
{
- lib_signals_set_handler(SIGUSR1, TRUE, sig_reopen_logs, NULL);
+ lib_signals_set_handler(SIGUSR1, LIBSIG_FLAGS_SAFE,
+ sig_reopen_logs, NULL);
log_connections_init();
}
lib_signals_init();
lib_signals_ignore(SIGPIPE, TRUE);
lib_signals_ignore(SIGALRM, FALSE);
- lib_signals_set_handler(SIGHUP, TRUE, sig_settings_reload, NULL);
- lib_signals_set_handler(SIGUSR1, TRUE, sig_log_reopen, NULL);
- lib_signals_set_handler(SIGCHLD, TRUE, sig_reap_children, NULL);
- lib_signals_set_handler(SIGINT, TRUE, sig_die, NULL);
- lib_signals_set_handler(SIGTERM, TRUE, sig_die, NULL);
+ lib_signals_set_handler(SIGHUP, LIBSIG_FLAGS_SAFE,
+ sig_settings_reload, NULL);
+ lib_signals_set_handler(SIGUSR1, LIBSIG_FLAGS_SAFE,
+ sig_log_reopen, NULL);
+ lib_signals_set_handler(SIGCHLD, LIBSIG_FLAGS_SAFE,
+ sig_reap_children, NULL);
+ lib_signals_set_handler(SIGINT, LIBSIG_FLAGS_SAFE, sig_die, NULL);
+ lib_signals_set_handler(SIGTERM, LIBSIG_FLAGS_SAFE, sig_die, NULL);
create_pid_file(pidfile_path);
create_config_symlink(set);
static void main_init(const struct ssl_params_settings *set)
{
- lib_signals_set_handler(SIGCHLD, TRUE, sig_chld, NULL);
+ lib_signals_set_handler(SIGCHLD, LIBSIG_FLAGS_SAFE, sig_chld, NULL);
ssl_params = buffer_create_dynamic(default_pool, 1024);
param = ssl_params_init(PKG_STATEDIR"/"SSL_BUILD_PARAM_FNAME,
lib_init();
lib_signals_init();
ioloop = io_loop_create();
- lib_signals_set_handler(SIGINT, TRUE, sig_die, NULL);
- lib_signals_set_handler(SIGTERM, TRUE, sig_die, NULL);
+ lib_signals_set_handler(SIGINT, LIBSIG_FLAG_DELAYED, sig_die, NULL);
+ lib_signals_set_handler(SIGTERM, LIBSIG_FLAG_DELAYED, sig_die, NULL);
if (pid != 0) {
close(fd[1]);