Mercurial > dovecot > original-hg > dovecot-1.2
diff src/login-common/ssl-proxy-openssl.c @ 2302:8438064ddf08 HEAD
Refcounting fixes. Unexpectedly destroyed SSL connection could have left
looping for a long time.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Fri, 09 Jul 2004 14:45:01 +0300 |
parents | dc5d0da1abe9 |
children | 891990251008 |
line wrap: on
line diff
--- a/src/login-common/ssl-proxy-openssl.c Fri Jul 09 13:57:32 2004 +0300 +++ b/src/login-common/ssl-proxy-openssl.c Fri Jul 09 14:45:01 2004 +0300 @@ -368,6 +368,8 @@ void ssl_proxy_free(struct ssl_proxy *proxy) { + if (!proxy->destroyed) + ssl_proxy_destroy(proxy); ssl_proxy_unref(proxy); } @@ -377,6 +379,19 @@ return TRUE; i_assert(proxy->refcount == 0); + SSL_free(proxy->ssl); + i_free(proxy); + + main_unref(); + return FALSE; +} + +static void ssl_proxy_destroy(struct ssl_proxy *proxy) +{ + if (proxy->destroyed) + return; + proxy->destroyed = TRUE; + hash_remove(ssl_proxies, proxy); (void)net_disconnect(proxy->fd_ssl); @@ -391,19 +406,7 @@ if (proxy->io_plain_write != NULL) io_remove(proxy->io_plain_write); - SSL_free(proxy->ssl); - i_free(proxy); - - main_unref(); - return FALSE; -} - -static void ssl_proxy_destroy(struct ssl_proxy *proxy) -{ - if (!proxy->destroyed) { - proxy->destroyed = TRUE; - ssl_proxy_unref(proxy); - } + ssl_proxy_unref(proxy); } static RSA *ssl_gen_rsa_key(SSL *ssl __attr_unused__,