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