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__,