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