Mercurial > dovecot > core-2.2
changeset 22025:1248ad7e16cd
master: Wait more precisely 5 secs at deinit for child processes to die.
Use milliseconds granularity instead of seconds.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Tue, 02 May 2017 15:56:40 +0300 |
parents | cc3d5de90348 |
children | 7835a8a35d66 |
files | src/master/service-monitor.c |
diffstat | 1 files changed, 9 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/master/service-monitor.c Tue May 02 15:41:41 2017 +0300 +++ b/src/master/service-monitor.c Tue May 02 15:56:40 2017 +0300 @@ -7,6 +7,7 @@ #include "hash.h" #include "str.h" #include "safe-mkstemp.h" +#include "time-util.h" #include "master-client.h" #include "service.h" #include "service-process.h" @@ -22,7 +23,7 @@ #define SERVICE_DROP_WARN_INTERVAL_SECS 60 #define SERVICE_DROP_TIMEOUT_MSECS (10*1000) -#define MAX_DIE_WAIT_SECS 5 +#define MAX_DIE_WAIT_MSECS 5000 #define SERVICE_MAX_EXIT_FAILURES_IN_SEC 10 #define SERVICE_PREFORK_MAX_AT_ONCE 10 @@ -573,9 +574,12 @@ static void services_monitor_wait(struct service_list *service_list) { struct service *const *servicep; - time_t max_wait_time = time(NULL) + MAX_DIE_WAIT_SECS; + struct timeval tv_start; bool finished; + io_loop_time_refresh(); + tv_start = ioloop_timeval; + for (;;) { finished = TRUE; services_monitor_reap_children(); @@ -585,7 +589,9 @@ if ((*servicep)->process_avail > 0) finished = FALSE; } - if (finished || time(NULL) > max_wait_time) + io_loop_time_refresh(); + if (finished || + timeval_diff_msecs(&ioloop_timeval, &tv_start) > MAX_DIE_WAIT_MSECS) break; usleep(100000); }