#define FTS_CONTEXT(obj) \
MODULE_CONTEXT(obj, fts_storage_module)
+#define FTS_CONTEXT_REQUIRE(obj) \
+ MODULE_CONTEXT_REQUIRE(obj, fts_storage_module)
#define FTS_MAIL_CONTEXT(obj) \
- MODULE_CONTEXT(obj, fts_mail_module)
+ MODULE_CONTEXT_REQUIRE(obj, fts_mail_module)
#define FTS_LIST_CONTEXT(obj) \
MODULE_CONTEXT(obj, fts_mailbox_list_module)
+#define FTS_LIST_CONTEXT_REQUIRE(obj) \
+ MODULE_CONTEXT_REQUIRE(obj, fts_mailbox_list_module)
#define INDEXER_SOCKET_NAME "indexer"
#define INDEXER_HANDSHAKE "VERSION\tindexer\t1\t0\n"
static int fts_mailbox_get_last_cached_seq(struct mailbox *box, uint32_t *seq_r)
{
- struct fts_mailbox_list *flist = FTS_LIST_CONTEXT(box->list);
+ struct fts_mailbox_list *flist = FTS_LIST_CONTEXT_REQUIRE(box->list);
uint32_t seq1, seq2, last_uid;
if (fts_backend_get_last_uid(flist->backend, box, &last_uid) < 0) {
fts_mailbox_get_status(struct mailbox *box, enum mailbox_status_items items,
struct mailbox_status *status_r)
{
- struct fts_mailbox *fbox = FTS_CONTEXT(box);
+ struct fts_mailbox *fbox = FTS_CONTEXT_REQUIRE(box);
uint32_t seq;
if (fbox->module_ctx.super.get_status(box, items, status_r) < 0)
enum mail_fetch_field wanted_fields,
struct mailbox_header_lookup_ctx *wanted_headers)
{
- struct fts_transaction_context *ft = FTS_CONTEXT(t);
- struct fts_mailbox *fbox = FTS_CONTEXT(t->box);
- struct fts_mailbox_list *flist = FTS_LIST_CONTEXT(t->box->list);
+ struct fts_transaction_context *ft = FTS_CONTEXT_REQUIRE(t);
+ struct fts_mailbox *fbox = FTS_CONTEXT_REQUIRE(t->box);
+ struct fts_mailbox_list *flist = FTS_LIST_CONTEXT_REQUIRE(t->box->list);
struct mail_search_context *ctx;
struct fts_search_context *fctx;
static bool fts_mailbox_build_continue(struct mail_search_context *ctx)
{
- struct fts_search_context *fctx = FTS_CONTEXT(ctx);
+ struct fts_search_context *fctx = FTS_CONTEXT_REQUIRE(ctx);
int ret;
ret = fts_indexer_more(fctx->indexer_ctx);
fts_mailbox_search_next_nonblock(struct mail_search_context *ctx,
struct mail **mail_r, bool *tryagain_r)
{
- struct fts_mailbox *fbox = FTS_CONTEXT(ctx->transaction->box);
+ struct fts_mailbox *fbox = FTS_CONTEXT_REQUIRE(ctx->transaction->box);
struct fts_search_context *fctx = FTS_CONTEXT(ctx);
- struct fts_transaction_context *ft = FTS_CONTEXT(ctx->transaction);
+ struct fts_transaction_context *ft = FTS_CONTEXT_REQUIRE(ctx->transaction);
if (fctx == NULL && ft->failed) {
/* precaching already failed - stop now instead of potentially
fts_search_apply_results_level(struct mail_search_context *ctx,
struct mail_search_arg *args, unsigned int *idx)
{
- struct fts_search_context *fctx = FTS_CONTEXT(ctx);
+ struct fts_search_context *fctx = FTS_CONTEXT_REQUIRE(ctx);
const struct fts_search_level *level;
level = array_idx(&fctx->levels, *idx);
static bool fts_mailbox_search_next_update_seq(struct mail_search_context *ctx)
{
- struct fts_mailbox *fbox = FTS_CONTEXT(ctx->transaction->box);
+ struct fts_mailbox *fbox = FTS_CONTEXT_REQUIRE(ctx->transaction->box);
struct fts_search_context *fctx = FTS_CONTEXT(ctx);
unsigned int idx;
static int fts_mailbox_search_deinit(struct mail_search_context *ctx)
{
- struct fts_mailbox *fbox = FTS_CONTEXT(ctx->transaction->box);
- struct fts_transaction_context *ft = FTS_CONTEXT(ctx->transaction);
+ struct fts_mailbox *fbox = FTS_CONTEXT_REQUIRE(ctx->transaction->box);
+ struct fts_transaction_context *ft = FTS_CONTEXT_REQUIRE(ctx->transaction);
struct fts_search_context *fctx = FTS_CONTEXT(ctx);
int ret = 0;
{
struct mail_private *mail = (struct mail_private *)_mail;
struct fts_mail *fmail = FTS_MAIL_CONTEXT(mail);
- struct fts_transaction_context *ft = FTS_CONTEXT(_mail->transaction);
+ struct fts_transaction_context *ft = FTS_CONTEXT_REQUIRE(_mail->transaction);
const struct fts_score_map *scores;
if (field != MAIL_FETCH_SEARCH_RELEVANCY || ft->scores == NULL)
static int fts_mail_precache_init(struct mail *_mail)
{
- struct fts_transaction_context *ft = FTS_CONTEXT(_mail->transaction);
- struct fts_mailbox_list *flist = FTS_LIST_CONTEXT(_mail->box->list);
+ struct fts_transaction_context *ft = FTS_CONTEXT_REQUIRE(_mail->transaction);
+ struct fts_mailbox_list *flist = FTS_LIST_CONTEXT_REQUIRE(_mail->box->list);
uint32_t last_seq;
if (fts_mailbox_get_last_cached_seq(_mail->box, &last_seq) < 0)
static void fts_mail_index(struct mail *_mail)
{
- struct fts_transaction_context *ft = FTS_CONTEXT(_mail->transaction);
- struct fts_mailbox_list *flist = FTS_LIST_CONTEXT(_mail->box->list);
+ struct fts_transaction_context *ft = FTS_CONTEXT_REQUIRE(_mail->transaction);
+ struct fts_mailbox_list *flist = FTS_LIST_CONTEXT_REQUIRE(_mail->box->list);
if (ft->failed)
return;
{
struct mail_private *mail = (struct mail_private *)_mail;
struct fts_mail *fmail = FTS_MAIL_CONTEXT(mail);
- struct fts_transaction_context *ft = FTS_CONTEXT(_mail->transaction);
+ struct fts_transaction_context *ft = FTS_CONTEXT_REQUIRE(_mail->transaction);
fmail->module_ctx.super.precache(_mail);
if (fmail->virtual_mail) {
enum mailbox_transaction_flags flags,
const char *reason)
{
- struct fts_mailbox *fbox = FTS_CONTEXT(box);
+ struct fts_mailbox *fbox = FTS_CONTEXT_REQUIRE(box);
struct mailbox_transaction_context *t;
struct fts_transaction_context *ft;
static int fts_transaction_end(struct mailbox_transaction_context *t, const char **error_r)
{
- struct fts_transaction_context *ft = FTS_CONTEXT(t);
- struct fts_mailbox_list *flist = FTS_LIST_CONTEXT(t->box->list);
+ struct fts_transaction_context *ft = FTS_CONTEXT_REQUIRE(t);
+ struct fts_mailbox_list *flist = FTS_LIST_CONTEXT_REQUIRE(t->box->list);
int ret = ft->failed ? -1 : 0;
if (ft->failed)
static void fts_transaction_rollback(struct mailbox_transaction_context *t)
{
- struct fts_mailbox *fbox = FTS_CONTEXT(t->box);
+ struct fts_mailbox *fbox = FTS_CONTEXT_REQUIRE(t->box);
const char *error;
(void)fts_transaction_end(t, &error);
fts_transaction_commit(struct mailbox_transaction_context *t,
struct mail_transaction_commit_changes *changes_r)
{
- struct fts_transaction_context *ft = FTS_CONTEXT(t);
- struct fts_mailbox *fbox = FTS_CONTEXT(t->box);
+ struct fts_transaction_context *ft = FTS_CONTEXT_REQUIRE(t);
+ struct fts_mailbox *fbox = FTS_CONTEXT_REQUIRE(t->box);
struct mailbox *box = t->box;
bool autoindex;
int ret = 0;
static void fts_mailbox_sync_notify(struct mailbox *box, uint32_t uid,
enum mailbox_sync_type sync_type)
{
- struct fts_mailbox_list *flist = FTS_LIST_CONTEXT(box->list);
- struct fts_mailbox *fbox = FTS_CONTEXT(box);
+ struct fts_mailbox_list *flist = FTS_LIST_CONTEXT_REQUIRE(box->list);
+ struct fts_mailbox *fbox = FTS_CONTEXT_REQUIRE(box);
if (fbox->module_ctx.super.sync_notify != NULL)
fbox->module_ctx.super.sync_notify(box, uid, sync_type);
struct mailbox_sync_status *status_r)
{
struct mailbox *box = ctx->box;
- struct fts_mailbox *fbox = FTS_CONTEXT(box);
+ struct fts_mailbox *fbox = FTS_CONTEXT_REQUIRE(box);
struct fts_mailbox_list *flist = FTS_LIST_CONTEXT(box->list);
bool optimize;
int ret = 0;
ctx = NULL;
if (optimize) {
+ i_assert(flist != NULL);
if (fts_backend_optimize(flist->backend) < 0) {
mailbox_set_critical(box, "FTS optimize failed");
ret = -1;
static int fts_save_finish(struct mail_save_context *ctx)
{
- struct fts_transaction_context *ft = FTS_CONTEXT(ctx->transaction);
- struct fts_mailbox *fbox = FTS_CONTEXT(ctx->transaction->box);
+ struct fts_transaction_context *ft = FTS_CONTEXT_REQUIRE(ctx->transaction);
+ struct fts_mailbox *fbox = FTS_CONTEXT_REQUIRE(ctx->transaction->box);
if (fbox->module_ctx.super.save_finish(ctx) < 0)
return -1;
static int fts_copy(struct mail_save_context *ctx, struct mail *mail)
{
- struct fts_transaction_context *ft = FTS_CONTEXT(ctx->transaction);
- struct fts_mailbox *fbox = FTS_CONTEXT(ctx->transaction->box);
+ struct fts_transaction_context *ft = FTS_CONTEXT_REQUIRE(ctx->transaction);
+ struct fts_mailbox *fbox = FTS_CONTEXT_REQUIRE(ctx->transaction->box);
if (fbox->module_ctx.super.copy(ctx, mail) < 0)
return -1;
static void fts_mailbox_list_deinit(struct mailbox_list *list)
{
- struct fts_mailbox_list *flist = FTS_LIST_CONTEXT(list);
+ struct fts_mailbox_list *flist = FTS_LIST_CONTEXT_REQUIRE(list);
if (flist->backend != NULL)
fts_backend_deinit(&flist->backend);
struct fts_backend *fts_mailbox_backend(struct mailbox *box)
{
- struct fts_mailbox_list *flist = FTS_LIST_CONTEXT(box->list);
+ struct fts_mailbox_list *flist = FTS_LIST_CONTEXT_REQUIRE(box->list);
return flist->backend;
}