dovecot-2.2: Call master_service_init_finish() only after all of...
dovecot at dovecot.org
dovecot at dovecot.org
Thu Jun 13 06:09:25 EEST 2013
details: http://hg.dovecot.org/dovecot-2.2/rev/754d244b8249
changeset: 16508:754d244b8249
user: Timo Sirainen <tss at iki.fi>
date: Thu Jun 13 06:07:54 2013 +0300
description:
Call master_service_init_finish() only after all of the initialization is done.
This way if the init crashes, the master process will throttle a buggy
service.
diffstat:
src/anvil/main.c | 2 +-
src/auth/main.c | 2 +-
src/dict/main.c | 2 +-
src/director/director-test.c | 2 +-
src/director/main.c | 2 +-
src/doveadm/main.c | 2 +-
src/imap-urlauth/imap-urlauth-worker.c | 3 +--
src/imap/main.c | 2 +-
src/indexer/indexer-worker.c | 2 +-
src/indexer/indexer.c | 2 +-
src/ipc/main.c | 2 +-
src/lib-master/master-service.c | 2 +-
src/lib-master/master-service.h | 5 ++++-
src/lmtp/main.c | 2 +-
src/log/main.c | 3 +--
src/plugins/quota/quota-status.c | 2 +-
src/pop3/main.c | 2 +-
src/replication/replicator/replicator.c | 2 +-
src/ssl-params/main.c | 3 +--
src/stats/main.c | 2 +-
src/util/script.c | 5 ++---
21 files changed, 25 insertions(+), 26 deletions(-)
diffs (truncated from 349 to 300 lines):
diff -r c012f8df87f9 -r 754d244b8249 src/anvil/main.c
--- a/src/anvil/main.c Thu Jun 13 05:29:07 2013 +0300
+++ b/src/anvil/main.c Thu Jun 13 06:07:54 2013 +0300
@@ -73,11 +73,11 @@
/* delay dying until all of our clients are gone */
master_service_set_die_with_master(master_service, FALSE);
- master_service_init_finish(master_service);
connect_limit = connect_limit_init();
penalty = penalty_init();
log_fdpass_io = io_add(MASTER_ANVIL_LOG_FDPASS_FD, IO_READ,
log_fdpass_input, (void *)NULL);
+ master_service_init_finish(master_service);
master_service_run(master_service, client_connected);
diff -r c012f8df87f9 -r 754d244b8249 src/auth/main.c
--- a/src/auth/main.c Thu Jun 13 05:29:07 2013 +0300
+++ b/src/auth/main.c Thu Jun 13 06:07:54 2013 +0300
@@ -387,9 +387,9 @@
}
main_preinit();
- master_service_init_finish(master_service);
master_service_set_die_callback(master_service, auth_die);
main_init();
+ master_service_init_finish(master_service);
master_service_run(master_service, worker ? worker_connected :
client_connected);
main_deinit();
diff -r c012f8df87f9 -r 754d244b8249 src/dict/main.c
--- a/src/dict/main.c Thu Jun 13 05:29:07 2013 +0300
+++ b/src/dict/main.c Thu Jun 13 06:07:54 2013 +0300
@@ -98,10 +98,10 @@
master_service_init_log(master_service, "dict: ");
main_preinit();
- master_service_init_finish(master_service);
master_service_set_die_callback(master_service, dict_die);
main_init();
+ master_service_init_finish(master_service);
master_service_run(master_service, client_connected);
main_deinit();
diff -r c012f8df87f9 -r 754d244b8249 src/director/director-test.c
--- a/src/director/director-test.c Thu Jun 13 05:29:07 2013 +0300
+++ b/src/director/director-test.c Thu Jun 13 06:07:54 2013 +0300
@@ -594,9 +594,9 @@
i_fatal("director-doveadm socket path missing");
master_service_init_log(master_service, "director-test: ");
- master_service_init_finish(master_service);
main_init(admin_path);
+ master_service_init_finish(master_service);
master_service_run(master_service, client_connected);
main_deinit();
diff -r c012f8df87f9 -r 754d244b8249 src/director/main.c
--- a/src/director/main.c Thu Jun 13 05:29:07 2013 +0300
+++ b/src/director/main.c Thu Jun 13 06:07:54 2013 +0300
@@ -213,7 +213,6 @@
master_service_init_log(master_service, "director: ");
main_preinit();
- master_service_init_finish(master_service);
director->test_port = test_port;
director_debug = debug;
director_connect(director);
@@ -225,6 +224,7 @@
t_strdup_printf("director(%s): ",
net_ip2addr(&director->self_ip)));
}
+ master_service_init_finish(master_service);
master_service_run(master_service, client_connected);
main_deinit();
diff -r c012f8df87f9 -r 754d244b8249 src/doveadm/main.c
--- a/src/doveadm/main.c Thu Jun 13 05:29:07 2013 +0300
+++ b/src/doveadm/main.c Thu Jun 13 06:07:54 2013 +0300
@@ -85,10 +85,10 @@
master_service_init_log(master_service, "doveadm: ");
main_preinit();
- master_service_init_finish(master_service);
master_service_set_die_callback(master_service, doveadm_die);
main_init();
+ master_service_init_finish(master_service);
master_service_run(master_service, client_connected);
main_deinit();
diff -r c012f8df87f9 -r 754d244b8249 src/imap-urlauth/imap-urlauth-worker.c
--- a/src/imap-urlauth/imap-urlauth-worker.c Thu Jun 13 05:29:07 2013 +0300
+++ b/src/imap-urlauth/imap-urlauth-worker.c Thu Jun 13 06:07:54 2013 +0300
@@ -1005,14 +1005,13 @@
master_service_init_log(master_service,
t_strdup_printf("imap-urlauth[%s]: ", my_pid));
-
- master_service_init_finish(master_service);
master_service_set_die_callback(master_service, imap_urlauth_worker_die);
random_init();
storage_service =
mail_storage_service_init(master_service,
set_roots, storage_service_flags);
+ master_service_init_finish(master_service);
/* fake that we're running, so we know if client was destroyed
while handling its initial input */
diff -r c012f8df87f9 -r 754d244b8249 src/imap/main.c
--- a/src/imap/main.c Thu Jun 13 05:29:07 2013 +0300
+++ b/src/imap/main.c Thu Jun 13 06:07:54 2013 +0300
@@ -363,7 +363,6 @@
}
}
- master_service_init_finish(master_service);
master_service_set_die_callback(master_service, imap_die);
/* plugins may want to add commands, so this needs to be called early */
@@ -374,6 +373,7 @@
storage_service =
mail_storage_service_init(master_service,
set_roots, storage_service_flags);
+ master_service_init_finish(master_service);
/* fake that we're running, so we know if client was destroyed
while handling its initial input */
diff -r c012f8df87f9 -r 754d244b8249 src/indexer/indexer-worker.c
--- a/src/indexer/indexer-worker.c Thu Jun 13 05:29:07 2013 +0300
+++ b/src/indexer/indexer-worker.c Thu Jun 13 06:07:54 2013 +0300
@@ -69,11 +69,11 @@
drop_privileges();
master_service_init_log(master_service, "indexer-worker: ");
- master_service_init_finish(master_service);
storage_service = mail_storage_service_init(master_service, NULL,
storage_service_flags);
restrict_access_allow_coredumps(TRUE);
+ master_service_init_finish(master_service);
master_service_run(master_service, client_connected);
diff -r c012f8df87f9 -r 754d244b8249 src/indexer/indexer.c
--- a/src/indexer/indexer.c Thu Jun 13 05:29:07 2013 +0300
+++ b/src/indexer/indexer.c Thu Jun 13 06:07:54 2013 +0300
@@ -134,11 +134,11 @@
restrict_access_allow_coredumps(TRUE);
master_service_set_idle_die_callback(master_service, idle_die);
- master_service_init_finish(master_service);
queue = indexer_queue_init(indexer_client_status_callback);
indexer_queue_set_listen_callback(queue, queue_listen_callback);
worker_pool = worker_pool_init("indexer-worker",
worker_status_callback);
+ master_service_init_finish(master_service);
master_service_run(master_service, client_connected);
diff -r c012f8df87f9 -r 754d244b8249 src/ipc/main.c
--- a/src/ipc/main.c Thu Jun 13 05:29:07 2013 +0300
+++ b/src/ipc/main.c Thu Jun 13 06:07:54 2013 +0300
@@ -48,8 +48,8 @@
restrict_access_by_env(NULL, FALSE);
restrict_access_allow_coredumps(TRUE);
+ ipc_groups_init();
master_service_init_finish(master_service);
- ipc_groups_init();
master_service_run(master_service, client_connected);
diff -r c012f8df87f9 -r 754d244b8249 src/lib-master/master-service.c
--- a/src/lib-master/master-service.c Thu Jun 13 05:29:07 2013 +0300
+++ b/src/lib-master/master-service.c Thu Jun 13 06:07:54 2013 +0300
@@ -137,6 +137,7 @@
i_set_failure_prefix("%s(init): ", name);
/* ignore these signals as early as possible */
+ lib_signals_init();
lib_signals_ignore(SIGPIPE, TRUE);
lib_signals_ignore(SIGALRM, FALSE);
@@ -428,7 +429,6 @@
struct stat st;
/* set default signal handlers */
- lib_signals_init();
if ((service->flags & MASTER_SERVICE_FLAG_STANDALONE) == 0)
sigint_flags |= LIBSIG_FLAG_RESTART;
lib_signals_set_handler(SIGINT, sigint_flags, sig_die, service);
diff -r c012f8df87f9 -r 754d244b8249 src/lib-master/master-service.h
--- a/src/lib-master/master-service.h Thu Jun 13 05:29:07 2013 +0300
+++ b/src/lib-master/master-service.h Thu Jun 13 06:07:54 2013 +0300
@@ -66,7 +66,10 @@
bool master_service_parse_option(struct master_service *service,
int opt, const char *arg);
/* Finish service initialization. The caller should drop privileges
- before calling this. */
+ before calling this. This also notifies the master that the service was
+ successfully started and there shouldn't be any service throttling even if
+ it crashes afterwards, so this should be called after all of the
+ initialization code is finished. */
void master_service_init_finish(struct master_service *service);
/* Clean environment from everything except the ones listed in
diff -r c012f8df87f9 -r 754d244b8249 src/lmtp/main.c
--- a/src/lmtp/main.c Thu Jun 13 05:29:07 2013 +0300
+++ b/src/lmtp/main.c Thu Jun 13 06:07:54 2013 +0300
@@ -110,7 +110,6 @@
if (t_get_current_dir(&base_dir) < 0)
i_fatal("getcwd() failed: %m");
drop_privileges();
- master_service_init_finish(master_service);
master_service_init_log(master_service,
t_strdup_printf("lmtp(%s): ", my_pid));
@@ -119,6 +118,7 @@
restrict_access_allow_coredumps(TRUE);
main_init();
+ master_service_init_finish(master_service);
master_service_run(master_service, client_connected);
main_deinit();
diff -r c012f8df87f9 -r 754d244b8249 src/log/main.c
--- a/src/log/main.c Thu Jun 13 05:29:07 2013 +0300
+++ b/src/log/main.c Thu Jun 13 06:07:54 2013 +0300
@@ -74,12 +74,11 @@
restrict_access_by_env(NULL, FALSE);
restrict_access_allow_coredumps(TRUE);
- master_service_init_finish(master_service);
-
/* logging should never die if there are some clients */
master_service_set_die_with_master(master_service, FALSE);
main_init();
+ master_service_init_finish(master_service);
master_service_run(master_service, client_connected);
main_deinit();
master_service_deinit(&master_service);
diff -r c012f8df87f9 -r 754d244b8249 src/plugins/quota/quota-status.c
--- a/src/plugins/quota/quota-status.c Thu Jun 13 05:29:07 2013 +0300
+++ b/src/plugins/quota/quota-status.c Thu Jun 13 06:07:54 2013 +0300
@@ -237,9 +237,9 @@
master_service_init_log(master_service, "doveadm: ");
main_preinit();
- master_service_init_finish(master_service);
main_init();
+ master_service_init_finish(master_service);
master_service_run(master_service, client_connected);
main_deinit();
master_service_deinit(&master_service);
diff -r c012f8df87f9 -r 754d244b8249 src/pop3/main.c
--- a/src/pop3/main.c Thu Jun 13 05:29:07 2013 +0300
+++ b/src/pop3/main.c Thu Jun 13 06:07:54 2013 +0300
@@ -253,12 +253,12 @@
login_set.callback = login_client_connected;
login_set.failure_callback = login_client_failed;
- master_service_init_finish(master_service);
master_service_set_die_callback(master_service, pop3_die);
storage_service =
mail_storage_service_init(master_service,
set_roots, storage_service_flags);
+ master_service_init_finish(master_service);
/* fake that we're running, so we know if client was destroyed
while handling its initial input */
diff -r c012f8df87f9 -r 754d244b8249 src/replication/replicator/replicator.c
--- a/src/replication/replicator/replicator.c Thu Jun 13 05:29:07 2013 +0300
+++ b/src/replication/replicator/replicator.c Thu Jun 13 06:07:54 2013 +0300
@@ -125,9 +125,9 @@
restrict_access_by_env(NULL, FALSE);
restrict_access_allow_coredumps(TRUE);
- master_service_init_finish(master_service);
main_init();
+ master_service_init_finish(master_service);
master_service_run(master_service, client_connected);
main_deinit();
diff -r c012f8df87f9 -r 754d244b8249 src/ssl-params/main.c
--- a/src/ssl-params/main.c Thu Jun 13 05:29:07 2013 +0300
+++ b/src/ssl-params/main.c Thu Jun 13 06:07:54 2013 +0300
@@ -147,13 +147,12 @@
restrict_access_by_env(NULL, FALSE);
restrict_access_allow_coredumps(TRUE);
- master_service_init_finish(master_service);
-
More information about the dovecot-cvs
mailing list