/* 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);
}
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();
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();
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();
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);
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();
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();
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 */
}
}
- 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 */
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 */
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);
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);
restrict_access_by_env(NULL, FALSE);
restrict_access_allow_coredumps(TRUE);
- master_service_init_finish(master_service);
ipc_groups_init();
+ master_service_init_finish(master_service);
master_service_run(master_service, client_connected);
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);
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);
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
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));
restrict_access_allow_coredumps(TRUE);
main_init();
+ master_service_init_finish(master_service);
master_service_run(master_service, client_connected);
main_deinit();
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);
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);
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 */
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();
restrict_access_by_env(NULL, FALSE);
restrict_access_allow_coredumps(TRUE);
- master_service_init_finish(master_service);
-
#ifndef HAVE_SSL
i_fatal("Dovecot built without SSL support");
#endif
main_init(set);
+ master_service_init_finish(master_service);
master_service_run(master_service, client_connected);
main_deinit();
restrict_access_by_env(NULL, FALSE);
restrict_access_allow_coredumps(TRUE);
- master_service_init_finish(master_service);
sets = master_service_settings_get_others(master_service);
stats_settings = sets[0];
mail_domains_init();
mail_ips_init();
+ master_service_init_finish(master_service);
master_service_run(master_service, client_connected);
clients_destroy_all();
argv += optind;
master_service_init_log(master_service, "script: ");
+ if (argv[0] == NULL)
+ i_fatal("Missing script path");
restrict_access_by_env(NULL, FALSE);
restrict_access_allow_coredumps(TRUE);
master_service_init_finish(master_service);
master_service_set_service_count(master_service, 1);
- if (argv[0] == NULL)
- i_fatal("Missing script path");
-
if (argv[0][0] == '/')
binary = argv[0];
else