static void last_login_user_deinit(struct mail_user *user) { struct last_login_user *luser = LAST_LOGIN_USER_CONTEXT(user); last_login_dict_deinit(user); luser->module_ctx.super.deinit(user); }
static void last_login_dict_deinit(struct mail_user *user) { struct last_login_user *luser = LAST_LOGIN_USER_CONTEXT(user); if (luser->dict != NULL) { dict_wait(luser->dict); dict_deinit(&luser->dict); } /* remove timeout after dict_wait(), which may trigger last_login_dict_commit() */ if (luser->to != NULL) timeout_remove(&luser->to); }
static void last_login_dict_commit(const struct dict_commit_result *result, void *context) { struct mail_user *user = context; struct last_login_user *luser = LAST_LOGIN_USER_CONTEXT(user); switch(result->ret) { case DICT_COMMIT_RET_OK: case DICT_COMMIT_RET_NOTFOUND: break; case DICT_COMMIT_RET_FAILED: i_error("last_login_dict: Failed to write value for user %s: %s", user->username, result->error); break; case DICT_COMMIT_RET_WRITE_UNCERTAIN: i_error("last_login_dict: Write was unconfirmed (timeout or disconnect) for user %s: %s", user->username, result->error); break; }; /* don't deinit the dict immediately here, lib-dict will just crash */ luser->to = timeout_add(0, last_login_dict_deinit, user); }
} static void last_login_user_deinit(struct mail_user *user) { struct last_login_user *luser = LAST_LOGIN_USER_CONTEXT(user); last_login_dict_deinit(user); luser->module_ctx.super.deinit(user); } static void last_login_dict_commit(const struct dict_commit_result *result ATTR_UNUSED, void *context) { struct mail_user *user = context; struct last_login_user *luser = LAST_LOGIN_USER_CONTEXT(user); /* don't deinit the dict immediately here, lib-dict will just crash */ luser->to = timeout_add(0, last_login_dict_deinit, user); } static void last_login_mail_user_created(struct mail_user *user) { struct mail_user_vfuncs *v = user->vlast; struct last_login_user *luser; struct dict *dict; struct dict_settings set; struct dict_transaction_context *trans; const char *dict_value, *key_name, *precision, *error; if (user->autocreated) {