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.3.0.rc1~2984 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=666d85f7060e04e8fb021f1347e853de28107e89;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 2d13d4e1f0..0d021551a6 100644 --- a/src/login-common/login-proxy.c +++ b/src/login-common/login-proxy.c @@ -300,7 +300,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) @@ -482,8 +483,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)