]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
Use SA_RESTART flag for signals wherever possible.
authorTimo Sirainen <tss@iki.fi>
Mon, 6 Jun 2011 15:26:45 +0000 (18:26 +0300)
committerTimo Sirainen <tss@iki.fi>
Mon, 6 Jun 2011 15:26:45 +0000 (18:26 +0300)
Only SIGTERM (and SIGINT for standalone programs) shouldn't use it.

src/auth/auth-cache.c
src/auth/mech-winbind.c
src/doveadm/doveadm-mail.c
src/lib-master/master-service.c
src/lib/child-wait.c
src/log/main.c
src/master/main.c
src/ssl-params/main.c
src/util/maildirlock.c

index 5ad49a83b1dd6a80d8923d38090b88d5283d71bd..aa675081759fdf8d2d6e513b5457a6993f68b670 100644 (file)
@@ -134,8 +134,10 @@ struct auth_cache *auth_cache_new(size_t max_size, unsigned int ttl_secs,
        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;
 }
 
index 4299191c2bf7587fdec4c4b05053133749d8b0f9..9a08607fe6ed62e8493a131c40b171a4a7cf795d 100644 (file)
@@ -152,7 +152,8 @@ winbind_helper_connect(const struct auth_settings *set,
 
        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);
        }
 }
 
index 90bfdb980d557c7ebdf10dbd3e2ab6a34be5472c..23d7143a87cbaa58026bf12707776f4fefcf09e1 100644 (file)
@@ -267,8 +267,8 @@ doveadm_mail_all_users(struct doveadm_mail_cmd_context *ctx, char *argv[],
 
        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)
index b5ebdea50191e64ab518ca9a1bba61620f514e20..47fd07df9904d432057c77e74e4a925a752e44e8 100644 (file)
@@ -334,6 +334,7 @@ static void master_status_error(void *context)
 
 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 @@ void master_service_init_finish(struct master_service *service)
 
        /* 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);
        }
 
index e9881f552932008e2fe6447934aa1593a11b3d18..c4cb935d56ad9643836496bbdd78c3f0baa61be8 100644 (file)
@@ -91,7 +91,8 @@ void child_wait_init(void)
        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)
index 92c2aa3b84af65a2196e3fb390dfe48ef7ec2cca..6ce114debbfeaf49f20b36f7845c0b4ed5a781f4 100644 (file)
@@ -18,7 +18,8 @@ sig_reopen_logs(const siginfo_t *si ATTR_UNUSED, void *context ATTR_UNUSED)
 
 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();
 }
index fbe720622d8780604c5181c419998d3c0025e1f6..a4cea8b2eecf6e73d10680f0b4e0b15e73489e7f 100644 (file)
@@ -440,11 +440,14 @@ static void main_init(const struct master_settings *set)
        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);
index f646f45f13dd38f9d78d4539cbf281a5c6cdee98..71bbe6a0925cdac7c327916ca29d691ac73049f9 100644 (file)
@@ -109,7 +109,7 @@ static void sig_chld(const siginfo_t *si ATTR_UNUSED, void *context ATTR_UNUSED)
 
 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,
index 5a23dbd721383a124fabc7736b6b809974d91d21..f776de23feedfa23142c007761d00458cb20c3b7 100644 (file)
@@ -63,8 +63,8 @@ int main(int argc, const char *argv[])
        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]);