From: Timo Sirainen Date: Mon, 3 Dec 2018 13:59:13 +0000 (+0200) Subject: login-proxy: Fix potential crash for delayed disconnects X-Git-Tag: 2.3.9~1025 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=abac9d7ea6ba9c8f046afaf2ee8ef00ebcb0313c;p=thirdparty%2Fdovecot%2Fcore.git login-proxy: Fix potential crash for delayed disconnects This happens only with login_proxy_max_disconnect_delay. Fixes: Panic: file ioloop.c: line 86 (io_add): assertion failed: (fd >= 0) --- diff --git a/src/login-common/login-proxy.c b/src/login-common/login-proxy.c index 41dd113d23..2f69599a11 100644 --- a/src/login-common/login-proxy.c +++ b/src/login-common/login-proxy.c @@ -414,6 +414,7 @@ static void login_proxy_free_final(struct login_proxy *proxy) io_remove(&proxy->client_wait_io); i_stream_destroy(&proxy->client_input); o_stream_destroy(&proxy->client_output); + client_unref(&proxy->client); i_free(proxy->host); i_free(proxy); } @@ -517,6 +518,8 @@ login_proxy_free_full(struct login_proxy **_proxy, const char *reason, if (proxy->callback != NULL) proxy->callback(proxy->client); } + client->login_proxy = NULL; + if (delay_ms == 0) login_proxy_free_final(proxy); else { @@ -524,9 +527,6 @@ login_proxy_free_full(struct login_proxy **_proxy, const char *reason, proxy->client_wait_io = io_add_istream(proxy->client_input, proxy_client_disconnected_input, proxy); } - - client->login_proxy = NULL; - client_unref(&client); } static void ATTR_NULL(2)