static void mail_user_deinit_base(struct mail_user *user)
{
mail_namespaces_deinit(&user->namespaces);
- pool_unref(&user->pool);
}
struct mail_user *mail_user_alloc(const char *username,
i_assert(user->refcount > 0);
*_user = NULL;
- if (--user->refcount == 0)
- user->v.deinit(user);
+ if (user->refcount > 1) {
+ user->refcount--;
+ return;
+ }
+
+ /* call deinit() with refcount=1, otherwise we may assert-crash in
+ mail_user_ref() that is called by some deinit() handler. */
+ user->v.deinit(user);
+ i_assert(user->refcount == 1);
+ pool_unref(&user->pool);
}
struct mail_user *mail_user_find(struct mail_user *user, const char *name)