From: Timo Sirainen Date: Fri, 23 Sep 2016 11:59:33 +0000 (+0300) Subject: login proxy: Don't leak connections if reconnect fails with "Host is down" X-Git-Tag: 2.2.26~229 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=211d75a91b69c8fea39fcf15b3d19da77ad3ff46;p=thirdparty%2Fdovecot%2Fcore.git login proxy: Don't leak connections if reconnect fails with "Host is down" Double-disconnection was also attempting to close the same fd twice, but I think that couldn't have happened before this leak was fixed. --- diff --git a/src/login-common/login-proxy.c b/src/login-common/login-proxy.c index 751cb2dd42..7ccf1558e9 100644 --- a/src/login-common/login-proxy.c +++ b/src/login-common/login-proxy.c @@ -305,7 +305,8 @@ proxy_log_connect_error(struct login_proxy *proxy) static void proxy_reconnect_timeout(struct login_proxy *proxy) { timeout_remove(&proxy->to); - (void)login_proxy_connect(proxy); + if (login_proxy_connect(proxy) < 0) + login_proxy_free(&proxy); } static bool proxy_try_reconnect(struct login_proxy *proxy) @@ -487,8 +488,10 @@ static void login_proxy_disconnect(struct login_proxy *proxy) i_stream_destroy(&proxy->server_input); if (proxy->server_output != NULL) o_stream_destroy(&proxy->server_output); - if (proxy->server_fd != -1) + if (proxy->server_fd != -1) { net_disconnect(proxy->server_fd); + proxy->server_fd = -1; + } } static void login_proxy_free_final(struct login_proxy *proxy)