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