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