Lines Matching defs:ilist

28 	struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(list);
31 mail_index_reset_error(ilist->index);
34 static void mailbox_list_index_init_pool(struct mailbox_list_index *ilist)
36 ilist->mailbox_pool = pool_alloconly_create("mailbox list index", 4096);
37 hash_table_create_direct(&ilist->mailbox_names, ilist->mailbox_pool, 0);
38 hash_table_create_direct(&ilist->mailbox_hash, ilist->mailbox_pool, 0);
41 void mailbox_list_index_reset(struct mailbox_list_index *ilist)
43 hash_table_destroy(&ilist->mailbox_names);
44 hash_table_destroy(&ilist->mailbox_hash);
45 pool_unref(&ilist->mailbox_pool);
47 ilist->mailbox_tree = NULL;
48 ilist->highest_name_id = 0;
49 ilist->sync_log_file_seq = 0;
50 ilist->sync_log_file_offset = 0;
52 mailbox_list_index_init_pool(ilist);
57 struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(list);
62 if (ilist->opened)
68 i_assert(ilist->index != NULL);
79 if (!mail_index_use_existing_permissions(ilist->index)) {
83 mail_index_set_permissions(ilist->index, perm.file_create_mode,
95 mail_index_set_optimization_settings(ilist->index, &optimize_set);
97 mail_index_set_fsync_mode(ilist->index, set->parsed_fsync_mode, 0);
98 mail_index_set_lock_method(ilist->index, set->parsed_lock_method,
100 if (mail_index_open_or_create(ilist->index, index_flags) < 0) {
101 if (mail_index_move_to_memory(ilist->index) < 0) {
105 if (mail_index_open_or_create(ilist->index,
112 ilist->opened = TRUE;
131 struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(list);
132 struct mailbox_list_index_node *node = ilist->mailbox_tree;
163 mailbox_list_index_lookup_uid(struct mailbox_list_index *ilist, uint32_t uid)
165 return hash_table_lookup(ilist->mailbox_hash, POINTER_CAST(uid));
178 void mailbox_list_index_node_unlink(struct mailbox_list_index *ilist,
184 &ilist->mailbox_tree : &node->parent->children;
191 static int mailbox_list_index_parse_header(struct mailbox_list_index *ilist,
201 mail_index_map_get_header_ext(view, view->map, ilist->ext_id, &data, &size);
227 name = p_strndup(ilist->mailbox_pool, name_start, len);
230 name = p_strdup(ilist->mailbox_pool, str_c(str));
238 hash_table_insert(ilist->mailbox_names, POINTER_CAST(id), name);
239 ilist->highest_name_id = id;
246 mailbox_list_index_generate_name(struct mailbox_list_index *ilist,
256 name = p_strdup_printf(ilist->mailbox_pool, "%s%s", prefix,
261 hash_table_insert(ilist->mailbox_names,
263 if (ilist->highest_name_id < node->name_id)
264 ilist->highest_name_id = node->name_id;
293 static int mailbox_list_index_parse_records(struct mailbox_list_index *ilist,
313 node = p_new(ilist->mailbox_pool,
319 mail_index_lookup_ext(view, seq, ilist->ext_id,
330 if (!ilist->has_backing_store && guid_128_is_empty(irec->guid) &&
344 node->name_id = ++ilist->highest_name_id;
347 node->name = hash_table_lookup(ilist->mailbox_names,
352 if (ilist->has_backing_store)
355 mailbox_list_index_generate_name(ilist, node, "unknown-");
357 hash_table_insert(ilist->mailbox_hash,
364 if (*error_r != NULL && ilist->has_backing_store)
368 mail_index_lookup_ext(view, seq, ilist->ext_id,
372 node = mailbox_list_index_lookup_uid(ilist, uid);
377 parent = mailbox_list_index_lookup_uid(ilist,
383 if (ilist->has_backing_store)
391 if (ilist->has_backing_store)
402 ilist->rebuild_on_missing_inbox = FALSE;
409 if (ilist->has_backing_store) {
419 node->name_id = ++ilist->highest_name_id;
420 mailbox_list_index_generate_name(ilist, node,
426 node->next = ilist->mailbox_tree;
427 ilist->mailbox_tree = node;
436 struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(list);
442 hdr->log_file_seq == ilist->sync_log_file_seq &&
443 hdr->log_file_head_offset == ilist->sync_log_file_offset) {
449 "Mailbox list index was marked as fsck'd %s", ilist->path);
450 ilist->call_corruption_callback = TRUE;
453 mailbox_list_index_reset(ilist);
454 ilist->sync_log_file_seq = hdr->log_file_seq;
455 ilist->sync_log_file_offset = hdr->log_file_head_offset;
457 if (mailbox_list_index_parse_header(ilist, view) < 0) {
459 "Corrupted mailbox list index header %s", ilist->path);
460 if (ilist->has_backing_store) {
461 mail_index_mark_corrupted(ilist->index);
464 ilist->call_corruption_callback = TRUE;
465 ilist->corrupted_names_or_parents = TRUE;
467 if (mailbox_list_index_parse_records(ilist, view, &error) < 0) {
470 ilist->path, error);
471 if (ilist->has_backing_store) {
472 mail_index_mark_corrupted(ilist->index);
475 ilist->call_corruption_callback = TRUE;
476 ilist->corrupted_names_or_parents = TRUE;
481 bool mailbox_list_index_need_refresh(struct mailbox_list_index *ilist,
488 if (!ilist->has_backing_store)
491 mail_index_get_header_ext(view, ilist->ext_id, &data, &size);
498 struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(list);
500 if (ilist->syncing)
502 if (ilist->last_refresh_timeval.tv_usec == ioloop_timeval.tv_usec &&
503 ilist->last_refresh_timeval.tv_sec == ioloop_timeval.tv_sec) {
516 struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(list);
521 i_assert(!ilist->syncing);
523 ilist->last_refresh_timeval = ioloop_timeval;
526 if (mail_index_refresh(ilist->index) < 0) {
531 view = mail_index_view_open(ilist->index);
532 if ((refresh = mailbox_list_index_need_refresh(ilist, view)) ||
533 ilist->mailbox_tree == NULL) {
548 struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(list);
550 timeout_remove(&ilist->to_refresh);
556 struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(list);
561 memset(&ilist->last_refresh_timeval, 0,
562 sizeof(ilist->last_refresh_timeval));
564 if (!ilist->has_backing_store)
569 view = mail_index_view_open(ilist->index);
570 if (!mailbox_list_index_need_refresh(ilist, view)) {
575 mail_index_update_header_ext(trans, ilist->ext_id,
579 mail_index_mark_corrupted(ilist->index);
584 if (ilist->to_refresh == NULL) {
585 ilist->to_refresh =
613 struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(list);
617 if (ilist->call_corruption_callback)
619 else if (ilist->rebuild_on_missing_inbox)
625 if (ilist->handling_corruption)
627 ilist->handling_corruption = TRUE;
641 ilist->handling_corruption = FALSE;
647 struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(list);
650 ilist->call_corruption_callback = FALSE;
651 ilist->rebuild_on_missing_inbox = FALSE;
662 struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(list);
664 timeout_remove(&ilist->to_refresh);
665 if (ilist->index != NULL) {
666 hash_table_destroy(&ilist->mailbox_hash);
667 hash_table_destroy(&ilist->mailbox_names);
668 pool_unref(&ilist->mailbox_pool);
669 if (ilist->opened)
670 mail_index_close(ilist->index);
671 mail_index_free(&ilist->index);
673 ilist->module_ctx.super.deinit(list);
680 struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(list);
683 if (ilist->syncing)
702 struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(list);
704 if (ilist->syncing)
763 struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(list);
765 if (ilist->module_ctx.super.delete_mailbox(list, name) < 0) {
777 struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(list);
779 if (ilist->module_ctx.super.delete_dir(list, name) < 0) {
814 struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT_REQUIRE(_list);
821 if (ilist->module_ctx.super.set_subscribed(_list, name, set) < 0)
828 view = mail_index_view_open(ilist->index);
829 mail_index_get_header_ext(view, ilist->subs_hdr_ext_id, &data, &size);
840 mail_index_update_header_ext(trans, ilist->subs_hdr_ext_id,
862 struct mailbox_list_index *ilist;
872 ilist = NULL;
873 MODULE_CONTEXT_SET(list, mailbox_list_index_module, ilist);
877 ilist = p_new(list->pool, struct mailbox_list_index, 1);
878 ilist->module_ctx.super = *v;
879 list->vlast = &ilist->module_ctx.super;
880 ilist->has_backing_store = has_backing_store;
881 ilist->pending_init = TRUE;
899 MODULE_CONTEXT_SET(list, mailbox_list_index_module, ilist);
910 struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(list);
913 if (ilist == NULL || !ilist->pending_init)
915 ilist->pending_init = FALSE;
924 i_assert(ilist->has_backing_store || dir != NULL);
927 ilist->path = dir == NULL ? "(in-memory mailbox list index)" :
929 ilist->index = mail_index_alloc(list->ns->user->event,
931 ilist->rebuild_on_missing_inbox = !ilist->has_backing_store &&
934 ilist->ext_id = mail_index_ext_register(ilist->index, "list",
938 ilist->subs_hdr_ext_id = mail_index_ext_register(ilist->index, "subs",
941 mailbox_list_index_init_pool(ilist);
988 struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(box->list);
991 if (ilist == NULL)