From 00bc3011bb9d6327329d97f96f81e8b76626afb8 Mon Sep 17 00:00:00 2001 From: Josef 'Jeff' Sipek Date: Fri, 12 May 2017 12:44:27 +0300 Subject: [PATCH] lib-storage: add a mail user pre-deinit vfunc This allows plugins to perform checks right before the deinit call. --- src/lib-storage/mail-user.c | 10 ++++++++-- src/lib-storage/mail-user.h | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/lib-storage/mail-user.c b/src/lib-storage/mail-user.c index 51d3cab828..0c7bdfd904 100644 --- a/src/lib-storage/mail-user.c +++ b/src/lib-storage/mail-user.c @@ -40,6 +40,10 @@ static void mail_user_deinit_base(struct mail_user *user) mail_storage_service_user_unref(&user->_service_user); } +static void mail_user_deinit_pre_base(struct mail_user *user ATTR_UNUSED) +{ +} + static void mail_user_stats_fill_base(struct mail_user *user ATTR_UNUSED, struct stats *stats ATTR_UNUSED) { @@ -73,6 +77,7 @@ mail_user_alloc_int(const char *username, i_panic("Settings check unexpectedly failed: %s", error); user->v.deinit = mail_user_deinit_base; + user->v.deinit_pre = mail_user_deinit_pre_base; user->v.stats_fill = mail_user_stats_fill_base; p_array_init(&user->module_contexts, user->pool, 5); return user; @@ -191,8 +196,9 @@ void mail_user_unref(struct mail_user **_user) user->deinitializing = TRUE; - /* call deinit() with refcount=1, otherwise we may assert-crash in - mail_user_ref() that is called by some deinit() handler. */ + /* call deinit() and deinit_pre() with refcount=1, otherwise we may + assert-crash in mail_user_ref() that is called by some handlers. */ + user->v.deinit_pre(user); user->v.deinit(user); i_assert(user->refcount == 1); pool_unref(&user->pool); diff --git a/src/lib-storage/mail-user.h b/src/lib-storage/mail-user.h index 81b31c78b8..08738ffb47 100644 --- a/src/lib-storage/mail-user.h +++ b/src/lib-storage/mail-user.h @@ -12,6 +12,7 @@ struct mail_user; struct mail_user_vfuncs { void (*deinit)(struct mail_user *user); + void (*deinit_pre)(struct mail_user *user); void (*stats_fill)(struct mail_user *user, struct stats *stats); }; -- 2.47.3