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)
{
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;
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);
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);
};