dovecot-2.0-sslstream: master: Make sure processes aren't create...

dovecot at dovecot.org dovecot at dovecot.org
Sat Feb 13 02:55:59 EET 2010


details:   http://hg.dovecot.org/dovecot-2.0-sslstream/rev/8ee2bb8f23a0
changeset: 10250:8ee2bb8f23a0
user:      Timo Sirainen <tss at iki.fi>
date:      Thu Nov 05 12:45:07 2009 -0500
description:
master: Make sure processes aren't created if its service is stopped.

diffstat:

3 files changed, 11 insertions(+), 8 deletions(-)
src/master/dup2-array.c      |    3 +++
src/master/service-monitor.c |   12 +++++-------
src/master/service-process.c |    4 +++-

diffs (74 lines):

diff -r 1c089f4f3e48 -r 8ee2bb8f23a0 src/master/dup2-array.c
--- a/src/master/dup2-array.c	Thu Nov 05 12:34:05 2009 -0500
+++ b/src/master/dup2-array.c	Thu Nov 05 12:45:07 2009 -0500
@@ -10,6 +10,9 @@ void dup2_append(ARRAY_TYPE(dup2) *dups,
 void dup2_append(ARRAY_TYPE(dup2) *dups, int fd_src, int fd_dest)
 {
 	struct dup2 d;
+
+	i_assert(fd_src >= 0);
+	i_assert(fd_dest >= 0);
 
 	d.fd_src = fd_src;
 	d.fd_dest = fd_dest;
diff -r 1c089f4f3e48 -r 8ee2bb8f23a0 src/master/service-monitor.c
--- a/src/master/service-monitor.c	Thu Nov 05 12:34:05 2009 -0500
+++ b/src/master/service-monitor.c	Thu Nov 05 12:45:07 2009 -0500
@@ -335,10 +335,8 @@ void services_monitor_start(struct servi
 				io_add(services[i]->status_fd[0], IO_READ,
 				       service_status_input, services[i]);
 		}
-		if (services[i]->status_fd[0] != -1) {
-			service_monitor_start_extra_avail(services[i]);
-			service_monitor_listen_start(services[i]);
-		}
+		service_monitor_start_extra_avail(services[i]);
+		service_monitor_listen_start(services[i]);
 	}
 
 	if (service_process_create(service_list->log) != NULL)
@@ -406,7 +404,7 @@ void services_monitor_reap_children(void
 	struct service *service;
 	pid_t pid;
 	int status;
-	bool service_destroyed;
+	bool service_stopped;
 
 	while ((pid = waitpid(-1, &status, WNOHANG)) > 0) {
 		process = hash_table_lookup(service_pids, &pid);
@@ -424,12 +422,12 @@ void services_monitor_reap_children(void
 		} else {
 			service_process_failure(process, status);
 		}
-		service_destroyed = service->list->destroyed;
+		service_stopped = service->status_fd[0] == -1;
 		if (service->type == SERVICE_TYPE_ANVIL)
 			service_anvil_process_destroyed(process);
 		service_process_destroy(process);
 
-		if (!service_destroyed) {
+		if (!service_stopped) {
 			service_monitor_start_extra_avail(service);
 			if (service->to_throttle == NULL)
 				service_monitor_listen_start(service);
diff -r 1c089f4f3e48 -r 8ee2bb8f23a0 src/master/service-process.c
--- a/src/master/service-process.c	Thu Nov 05 12:34:05 2009 -0500
+++ b/src/master/service-process.c	Thu Nov 05 12:45:07 2009 -0500
@@ -123,7 +123,7 @@ service_dup_fds(struct service *service)
 	closelog();
 
 	if (dup2_array(&dups) < 0)
-		service_error(service, "dup2s failed");
+		i_fatal("service(%s): dup2s failed", service->set->name);
 
 	env_put(t_strdup_printf("SOCKET_COUNT=%d", socket_listener_count));
 	env_put(t_strdup_printf("SSL_SOCKET_COUNT=%d", ssl_socket_count));
@@ -232,6 +232,8 @@ struct service_process *service_process_
 	unsigned int uid = ++uid_counter;
 	pid_t pid;
 	bool process_forked;
+
+	i_assert(service->status_fd[0] != -1);
 
 	if (service->to_throttle != NULL) {
 		/* throttling service, don't create new processes */


More information about the dovecot-cvs mailing list