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;
--- 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;