dovecot-2.0: master: Added service type=startup for starting one...
dovecot at dovecot.org
dovecot at dovecot.org
Mon Aug 9 20:12:15 EEST 2010
details: http://hg.dovecot.org/dovecot-2.0/rev/351948b4dc6c
changeset: 11968:351948b4dc6c
user: Timo Sirainen <tss at iki.fi>
date: Mon Aug 09 18:11:18 2010 +0100
description:
master: Added service type=startup for starting one service process at startup.
diffstat:
src/lib-master/service-settings.h | 3 ++-
src/master/master-settings.c | 2 ++
src/master/service-monitor.c | 10 ++++++++++
src/master/service-process.c | 1 +
src/master/service.c | 1 +
src/master/service.h | 1 +
6 files changed, 17 insertions(+), 1 deletions(-)
diffs (78 lines):
diff -r ed61aee681b8 -r 351948b4dc6c src/lib-master/service-settings.h
--- 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> */
diff -r ed61aee681b8 -r 351948b4dc6c src/master/master-settings.c
--- 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);
diff -r ed61aee681b8 -r 351948b4dc6c src/master/service-monitor.c
--- 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)
diff -r ed61aee681b8 -r 351948b4dc6c src/master/service-process.c
--- 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;
diff -r ed61aee681b8 -r 351948b4dc6c src/master/service.c
--- 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;
diff -r ed61aee681b8 -r 351948b4dc6c src/master/service.h
--- a/src/master/service.h Mon Aug 09 17:39:04 2010 +0100
+++ b/src/master/service.h Mon Aug 09 18:11:18 2010 +0100
@@ -108,6 +108,7 @@
int refcount;
struct timeout *to_kill;
+ const struct master_settings *set;
const struct master_service_settings *service_set;
struct service *config;
More information about the dovecot-cvs
mailing list