dovecot-2.2: Call lib_atexit() callbacks before destroying the l...

dovecot at dovecot.org dovecot at dovecot.org
Sun Nov 3 20:56:37 EET 2013


details:   http://hg.dovecot.org/dovecot-2.2/rev/5eae6c491d44
changeset: 16923:5eae6c491d44
user:      Timo Sirainen <tss at iki.fi>
date:      Sun Nov 03 20:56:25 2013 +0200
description:
Call lib_atexit() callbacks before destroying the lib-master ioloop.

diffstat:

 src/lib-master/master-service.c |   2 ++
 src/lib/lib.c                   |  20 ++++++++++++--------
 src/lib/lib.h                   |   3 +++
 3 files changed, 17 insertions(+), 8 deletions(-)

diffs (62 lines):

diff -r 55e03b34ae73 -r 5eae6c491d44 src/lib-master/master-service.c
--- a/src/lib-master/master-service.c	Sun Nov 03 01:12:24 2013 +0200
+++ b/src/lib-master/master-service.c	Sun Nov 03 20:56:25 2013 +0200
@@ -760,6 +760,8 @@
 		pool_unref(&service->set_pool);
 	}
 	lib_signals_deinit();
+	/* run atexit callbacks before destroying ioloop */
+	lib_atexit_run();
 	io_loop_destroy(&service->ioloop);
 
 	if (service->listener_names != NULL)
diff -r 55e03b34ae73 -r 5eae6c491d44 src/lib/lib.c
--- a/src/lib/lib.c	Sun Nov 03 01:12:24 2013 +0200
+++ b/src/lib/lib.c	Sun Nov 03 20:56:25 2013 +0200
@@ -53,6 +53,17 @@
 	array_append(&atexit_callbacks, &callback, 1);
 }
 
+void lib_atexit_run(void)
+{
+	lib_atexit_callback_t *const *cbp;
+
+	if (array_is_created(&atexit_callbacks)) {
+		array_foreach(&atexit_callbacks, cbp)
+			(**cbp)();
+		array_free(&atexit_callbacks);
+	}
+}
+
 void lib_init(void)
 {
 	struct timeval tv;
@@ -68,14 +79,7 @@
 
 void lib_deinit(void)
 {
-	lib_atexit_callback_t *const *cbp;
-
-	if (array_is_created(&atexit_callbacks)) {
-		array_foreach(&atexit_callbacks, cbp)
-			(**cbp)();
-		array_free(&atexit_callbacks);
-	}
-
+	lib_atexit_run();
 	ipwd_deinit();
 	hostpid_deinit();
 	data_stack_deinit();
diff -r 55e03b34ae73 -r 5eae6c491d44 src/lib/lib.h
--- a/src/lib/lib.h	Sun Nov 03 01:12:24 2013 +0200
+++ b/src/lib/lib.h	Sun Nov 03 20:56:25 2013 +0200
@@ -50,6 +50,9 @@
    functions are still available. Also if lib_atexit() is called multiple times
    to the same callback, it's added only once. */
 void lib_atexit(lib_atexit_callback_t *callback);
+/* Manually run the atexit callbacks. lib_deinit() also does this if not
+   explicitly called. */
+void lib_atexit_run(void);
 
 void lib_init(void);
 void lib_deinit(void);


More information about the dovecot-cvs mailing list