dovecot-2.1: master: log/anvil listener names weren't set correc...

dovecot at dovecot.org dovecot at dovecot.org
Fri Jan 6 21:42:37 EET 2012


details:   http://hg.dovecot.org/dovecot-2.1/rev/326b05f0246b
changeset: 13904:326b05f0246b
user:      Timo Sirainen <tss at iki.fi>
date:      Fri Jan 06 19:29:23 2012 +0200
description:
master: log/anvil listener names weren't set correctly.
Also this fixes a long standing static analyzer "error".

diffstat:

 src/master/service-process.c |  28 +++++++++++++---------------
 1 files changed, 13 insertions(+), 15 deletions(-)

diffs (80 lines):

diff -r 5f4b1539b406 -r 326b05f0246b src/master/service-process.c
--- a/src/master/service-process.c	Fri Jan 06 19:15:03 2012 +0200
+++ b/src/master/service-process.c	Fri Jan 06 19:29:23 2012 +0200
@@ -40,7 +40,8 @@
 	struct service_listener *const *listeners;
 	ARRAY_TYPE(dup2) dups;
 	string_t *listener_names;
-	unsigned int i, count, n = 0, socket_listener_count, ssl_socket_count;
+	int fd = MASTER_LISTEN_FD_FIRST;
+	unsigned int i, count, socket_listener_count, ssl_socket_count;
 
 	/* stdin/stdout is already redirected to /dev/null. Other master fds
 	   should have been opened with fd_close_on_exec() so we don't have to
@@ -56,20 +57,18 @@
 
 	switch (service->type) {
 	case SERVICE_TYPE_LOG:
-		i_assert(n == 0);
-		services_log_dup2(&dups, service->list, MASTER_LISTEN_FD_FIRST,
+		i_assert(fd == MASTER_LISTEN_FD_FIRST);
+		services_log_dup2(&dups, service->list, fd,
 				  &socket_listener_count);
-		n += socket_listener_count;
+		fd += socket_listener_count;
 		break;
 	case SERVICE_TYPE_ANVIL:
 		dup2_append(&dups, service_anvil_global->log_fdpass_fd[0],
 			    MASTER_ANVIL_LOG_FDPASS_FD);
 		/* nonblocking anvil fd must be the first one. anvil treats it
 		   as the master's fd */
-		dup2_append(&dups, service_anvil_global->nonblocking_fd[0],
-			    MASTER_LISTEN_FD_FIRST + n++);
-		dup2_append(&dups, service_anvil_global->blocking_fd[0],
-			    MASTER_LISTEN_FD_FIRST + n++);
+		dup2_append(&dups, service_anvil_global->nonblocking_fd[0], fd++);
+		dup2_append(&dups, service_anvil_global->blocking_fd[0], fd++);
 		socket_listener_count += 2;
 		break;
 	default:
@@ -77,7 +76,7 @@
 	}
 
 	/* anvil/log fds have no names */
-	for (i = MASTER_LISTEN_FD_FIRST; i < n; i++)
+	for (i = MASTER_LISTEN_FD_FIRST; i < (unsigned int)fd; i++)
 		str_append_c(listener_names, '\t');
 
 	/* first add non-ssl listeners */
@@ -87,9 +86,8 @@
 		     !listeners[i]->set.inetset.set->ssl)) {
 			str_tabescape_write(listener_names, listeners[i]->name);
 			str_append_c(listener_names, '\t');
-			dup2_append(&dups, listeners[i]->fd,
-				    MASTER_LISTEN_FD_FIRST + n);
-			n++; socket_listener_count++;
+			dup2_append(&dups, listeners[i]->fd, fd++);
+			socket_listener_count++;
 		}
 	}
 	/* then ssl-listeners */
@@ -100,9 +98,8 @@
 		    listeners[i]->set.inetset.set->ssl) {
 			str_tabescape_write(listener_names, listeners[i]->name);
 			str_append_c(listener_names, '\t');
-			dup2_append(&dups, listeners[i]->fd,
-				    MASTER_LISTEN_FD_FIRST + n);
-			n++; socket_listener_count++;
+			dup2_append(&dups, listeners[i]->fd, fd++);
+			socket_listener_count++;
 			ssl_socket_count++;
 		}
 	}
@@ -156,6 +153,7 @@
 	if (dup2_array(&dups) < 0)
 		i_fatal("service(%s): dup2s failed", service->set->name);
 
+	i_assert(fd == MASTER_LISTEN_FD_FIRST + (int)socket_listener_count);
 	env_put(t_strdup_printf("SOCKET_COUNT=%d", socket_listener_count));
 	env_put(t_strdup_printf("SSL_SOCKET_COUNT=%d", ssl_socket_count));
 	env_put(t_strdup_printf("SOCKET_NAMES=%s", str_c(listener_names)));


More information about the dovecot-cvs mailing list