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)
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;
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();
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);