Mercurial > dovecot > core-2.2
changeset 11968:351948b4dc6c
master: Added service type=startup for starting one service process at startup.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 09 Aug 2010 18:11:18 +0100 |
parents | ed61aee681b8 |
children | b8a09fa4acc4 |
files | src/lib-master/service-settings.h src/master/master-settings.c src/master/service-monitor.c src/master/service-process.c src/master/service.c src/master/service.h |
diffstat | 6 files changed, 17 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-master/service-settings.h Mon Aug 09 17:39:04 2010 +0100 +++ b/src/lib-master/service-settings.h Mon Aug 09 18:11:18 2010 +0100 @@ -7,7 +7,8 @@ SERVICE_TYPE_LOG, SERVICE_TYPE_ANVIL, SERVICE_TYPE_CONFIG, - SERVICE_TYPE_LOGIN + SERVICE_TYPE_LOGIN, + SERVICE_TYPE_STARTUP }; /* </settings checks> */
--- a/src/master/master-settings.c Mon Aug 09 17:39:04 2010 +0100 +++ b/src/master/master-settings.c Mon Aug 09 18:11:18 2010 +0100 @@ -311,6 +311,8 @@ set->parsed_type = SERVICE_TYPE_ANVIL; else if (strcmp(set->type, "login") == 0) set->parsed_type = SERVICE_TYPE_LOGIN; + else if (strcmp(set->type, "startup") == 0) + set->parsed_type = SERVICE_TYPE_STARTUP; else { *error_r = t_strconcat("Unknown service type: ", set->type, NULL);
--- a/src/master/service-monitor.c Mon Aug 09 17:39:04 2010 +0100 +++ b/src/master/service-monitor.c Mon Aug 09 18:11:18 2010 +0100 @@ -359,6 +359,16 @@ if (service_process_create(service_list->log) != NULL) service_monitor_listen_stop(service_list->log); + + /* start up a process for startup-services */ + array_foreach(&service_list->services, services) { + struct service *service = *services; + + if (service->type == SERVICE_TYPE_STARTUP) { + if (service_process_create(service) != NULL) + service_monitor_listen_stop(service); + } + } } void service_monitor_stop(struct service *service)
--- a/src/master/service-process.c Mon Aug 09 17:39:04 2010 +0100 +++ b/src/master/service-process.c Mon Aug 09 18:11:18 2010 +0100 @@ -110,6 +110,7 @@ break; case SERVICE_TYPE_UNKNOWN: case SERVICE_TYPE_LOGIN: + case SERVICE_TYPE_STARTUP: dup2_append(&dups, service_anvil_global->blocking_fd[1], MASTER_ANVIL_FD); break;
--- a/src/master/service.c Mon Aug 09 17:39:04 2010 +0100 +++ b/src/master/service.c Mon Aug 09 18:11:18 2010 +0100 @@ -402,6 +402,7 @@ service_list->pool = pool; service_list->service_set = master_service_settings_get(master_service); service_list->set_pool = master_service_settings_detach(master_service); + service_list->set = set; service_list->child_process_env = child_process_env; service_list->master_log_fd[0] = -1; service_list->master_log_fd[1] = -1;