dovecot-2.2: lib-ssl-iostream: Deinitialization fixes.

dovecot at dovecot.org dovecot at dovecot.org
Tue Aug 6 16:08:19 EEST 2013


details:   http://hg.dovecot.org/dovecot-2.2/rev/a53caa140f3d
changeset: 16668:a53caa140f3d
user:      Timo Sirainen <tss at iki.fi>
date:      Tue Aug 06 16:07:50 2013 +0300
description:
lib-ssl-iostream: Deinitialization fixes.

diffstat:

 src/lib-ssl-iostream/iostream-openssl-context.c |  5 ++---
 src/lib-ssl-iostream/iostream-openssl.c         |  2 ++
 src/lib-ssl-iostream/iostream-openssl.h         |  1 +
 src/lib-ssl-iostream/iostream-ssl-private.h     |  1 +
 src/lib-ssl-iostream/iostream-ssl.c             |  4 +++-
 5 files changed, 9 insertions(+), 4 deletions(-)

diffs (84 lines):

diff -r 07557a9c59b1 -r a53caa140f3d src/lib-ssl-iostream/iostream-openssl-context.c
--- a/src/lib-ssl-iostream/iostream-openssl-context.c	Tue Aug 06 15:11:14 2013 +0300
+++ b/src/lib-ssl-iostream/iostream-openssl-context.c	Tue Aug 06 16:07:50 2013 +0300
@@ -561,7 +561,7 @@
 	i_free(ctx);
 }
 
-static void ssl_iostream_deinit_global(void)
+void openssl_iostream_global_deinit(void)
 {
 	if (ssl_iostream_engine != NULL)
 		ENGINE_finish(ssl_iostream_engine);
@@ -581,7 +581,6 @@
 	if (ssl_global_initialized)
 		return 0;
 
-	atexit(ssl_iostream_deinit_global);
 	ssl_global_initialized = TRUE;
 	SSL_library_init();
 	SSL_load_error_strings();
@@ -603,7 +602,7 @@
 			*error_r = t_strdup_printf(
 				"Unknown ssl_crypto_device: %s",
 				set->crypto_device);
-			ssl_iostream_deinit_global();
+			/* we'll deinit at exit in any case */
 			return -1;
 		}
 		ENGINE_init(ssl_iostream_engine);
diff -r 07557a9c59b1 -r a53caa140f3d src/lib-ssl-iostream/iostream-openssl.c
--- a/src/lib-ssl-iostream/iostream-openssl.c	Tue Aug 06 15:11:14 2013 +0300
+++ b/src/lib-ssl-iostream/iostream-openssl.c	Tue Aug 06 16:07:50 2013 +0300
@@ -687,6 +687,8 @@
 }
 
 const struct iostream_ssl_vfuncs ssl_vfuncs = {
+	openssl_iostream_global_deinit,
+
 	openssl_iostream_context_init_client,
 	openssl_iostream_context_init_server,
 	openssl_iostream_context_deinit,
diff -r 07557a9c59b1 -r a53caa140f3d src/lib-ssl-iostream/iostream-openssl.h
--- a/src/lib-ssl-iostream/iostream-openssl.h	Tue Aug 06 15:11:14 2013 +0300
+++ b/src/lib-ssl-iostream/iostream-openssl.h	Tue Aug 06 16:07:50 2013 +0300
@@ -62,6 +62,7 @@
 					 struct ssl_iostream_context **ctx_r,
 					 const char **error_r);
 void openssl_iostream_context_deinit(struct ssl_iostream_context *ctx);
+void openssl_iostream_global_deinit(void);
 
 int openssl_iostream_load_key(const struct ssl_iostream_settings *set,
 			      EVP_PKEY **pkey_r, const char **error_r);
diff -r 07557a9c59b1 -r a53caa140f3d src/lib-ssl-iostream/iostream-ssl-private.h
--- a/src/lib-ssl-iostream/iostream-ssl-private.h	Tue Aug 06 15:11:14 2013 +0300
+++ b/src/lib-ssl-iostream/iostream-ssl-private.h	Tue Aug 06 16:07:50 2013 +0300
@@ -4,6 +4,7 @@
 #include "iostream-ssl.h"
 
 struct iostream_ssl_vfuncs {
+	void (*global_deinit)(void);
 	int (*context_init_client)(const struct ssl_iostream_settings *set,
 				   struct ssl_iostream_context **ctx_r,
 				   const char **error_r);
diff -r 07557a9c59b1 -r a53caa140f3d src/lib-ssl-iostream/iostream-ssl.c
--- a/src/lib-ssl-iostream/iostream-ssl.c	Tue Aug 06 15:11:14 2013 +0300
+++ b/src/lib-ssl-iostream/iostream-ssl.c	Tue Aug 06 16:07:50 2013 +0300
@@ -15,6 +15,8 @@
 #ifdef HAVE_SSL
 static void ssl_module_unload(void)
 {
+	module_dir_deinit(ssl_module);
+	ssl_vfuncs->global_deinit();
 	module_dir_unload(&ssl_module);
 }
 #endif
@@ -38,7 +40,7 @@
 		return -1;
 	}
 
-	atexit(ssl_module_unload);
+	lib_atexit(ssl_module_unload);
 	ssl_module_loaded = TRUE;
 	return 0;
 #else


More information about the dovecot-cvs mailing list