dovecot-2.0: Use SA_RESTART flag for signals wherever possible.
dovecot at dovecot.org
dovecot at dovecot.org
Mon Jun 6 18:26:55 EEST 2011
details: http://hg.dovecot.org/dovecot-2.0/rev/6fdee880c5dc
changeset: 12843:6fdee880c5dc
user: Timo Sirainen <tss at iki.fi>
date: Mon Jun 06 18:26:45 2011 +0300
description:
Use SA_RESTART flag for signals wherever possible.
Only SIGTERM (and SIGINT for standalone programs) shouldn't use it.
diffstat:
src/auth/auth-cache.c | 6 ++++--
src/auth/mech-winbind.c | 3 ++-
src/doveadm/doveadm-mail.c | 4 ++--
src/lib-master/master-service.c | 9 ++++++---
src/lib/child-wait.c | 3 ++-
src/log/main.c | 3 ++-
src/master/main.c | 13 ++++++++-----
src/ssl-params/main.c | 2 +-
src/util/maildirlock.c | 4 ++--
9 files changed, 29 insertions(+), 18 deletions(-)
diffs (145 lines):
diff -r 86e4023d08e4 -r 6fdee880c5dc src/auth/auth-cache.c
--- a/src/auth/auth-cache.c Mon Jun 06 18:25:52 2011 +0300
+++ b/src/auth/auth-cache.c Mon Jun 06 18:26:45 2011 +0300
@@ -134,8 +134,10 @@
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;
}
diff -r 86e4023d08e4 -r 6fdee880c5dc src/auth/mech-winbind.c
--- a/src/auth/mech-winbind.c Mon Jun 06 18:25:52 2011 +0300
+++ b/src/auth/mech-winbind.c Mon Jun 06 18:26:45 2011 +0300
@@ -152,7 +152,8 @@
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);
}
}
diff -r 86e4023d08e4 -r 6fdee880c5dc src/doveadm/doveadm-mail.c
--- a/src/doveadm/doveadm-mail.c Mon Jun 06 18:25:52 2011 +0300
+++ b/src/doveadm/doveadm-mail.c Mon Jun 06 18:26:45 2011 +0300
@@ -267,8 +267,8 @@
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)
diff -r 86e4023d08e4 -r 6fdee880c5dc src/lib-master/master-service.c
--- a/src/lib-master/master-service.c Mon Jun 06 18:25:52 2011 +0300
+++ b/src/lib-master/master-service.c Mon Jun 06 18:26:45 2011 +0300
@@ -334,6 +334,7 @@
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;
@@ -343,10 +344,12 @@
/* 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);
}
diff -r 86e4023d08e4 -r 6fdee880c5dc src/lib/child-wait.c
--- a/src/lib/child-wait.c Mon Jun 06 18:25:52 2011 +0300
+++ b/src/lib/child-wait.c Mon Jun 06 18:26:45 2011 +0300
@@ -91,7 +91,8 @@
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)
diff -r 86e4023d08e4 -r 6fdee880c5dc src/log/main.c
--- a/src/log/main.c Mon Jun 06 18:25:52 2011 +0300
+++ b/src/log/main.c Mon Jun 06 18:26:45 2011 +0300
@@ -18,7 +18,8 @@
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();
}
diff -r 86e4023d08e4 -r 6fdee880c5dc src/master/main.c
--- a/src/master/main.c Mon Jun 06 18:25:52 2011 +0300
+++ b/src/master/main.c Mon Jun 06 18:26:45 2011 +0300
@@ -440,11 +440,14 @@
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);
diff -r 86e4023d08e4 -r 6fdee880c5dc src/ssl-params/main.c
--- a/src/ssl-params/main.c Mon Jun 06 18:25:52 2011 +0300
+++ b/src/ssl-params/main.c Mon Jun 06 18:26:45 2011 +0300
@@ -109,7 +109,7 @@
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,
diff -r 86e4023d08e4 -r 6fdee880c5dc src/util/maildirlock.c
--- a/src/util/maildirlock.c Mon Jun 06 18:25:52 2011 +0300
+++ b/src/util/maildirlock.c Mon Jun 06 18:26:45 2011 +0300
@@ -63,8 +63,8 @@
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]);
More information about the dovecot-cvs
mailing list