From: Timo Sirainen Date: Thu, 1 Aug 2013 10:51:57 +0000 (+0300) Subject: lib-master: If config socket closes, retry connecting to it automatically. X-Git-Tag: 2.2.5~31 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1f73636296eb5ac856f36a08543fdc61983f1555;p=thirdparty%2Fdovecot%2Fcore.git lib-master: If config socket closes, retry connecting to it automatically. --- diff --git a/src/lib-master/master-service-settings.c b/src/lib-master/master-service-settings.c index fe028e26bd..5566d43e5e 100644 --- a/src/lib-master/master-service-settings.c +++ b/src/lib-master/master-service-settings.c @@ -367,20 +367,29 @@ int master_service_settings_read(struct master_service *service, unsigned int i; int ret, fd = -1; time_t now, timeout; - bool use_environment; + bool use_environment, retry; memset(output_r, 0, sizeof(*output_r)); if (getenv("DOVECONF_ENV") == NULL && (service->flags & MASTER_SERVICE_FLAG_NO_CONFIG_SETTINGS) == 0) { - fd = master_service_open_config(service, input, &path, error_r); - if (fd == -1) - return -1; - - if (config_send_request(service, input, fd, path, error_r) < 0) { - i_close_fd(&fd); - config_exec_fallback(service, input); - return -1; + retry = service->config_fd != -1; + for (;;) { + fd = master_service_open_config(service, input, + &path, error_r); + if (fd == -1) + return -1; + + if (config_send_request(service, input, fd, + path, error_r) == 0) + break; + if (!retry) { + i_close_fd(&fd); + config_exec_fallback(service, input); + return -1; + } + /* config process died, retry connecting */ + retry = FALSE; } }