1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
#ifndef MAILDIR_SYNC_H
#define MAILDIR_SYNC_H
/* All systems accessing the filesystem must have their clock less than this
many seconds apart from each others. 0 works only for local filesystems. */
#define MAILDIR_SYNC_SECS 1
/* After moving this many mails from new/ to cur/, check if we need to touch
the uidlist lock. */
#define MAILDIR_SLOW_MOVE_COUNT 100
/* readdir() should be pretty fast to do, but check anyway every n files
to see if we need to touch the uidlist lock. */
#define MAILDIR_SLOW_CHECK_COUNT 10000
/* If syncing takes longer than this, log a warning. */
#define MAILDIR_SYNC_TIME_WARN_SECS MAIL_TRANSACTION_LOG_LOCK_WARN_SECS
struct maildir_mailbox;
struct maildir_sync_context;
struct maildir_keywords_sync_ctx;
struct maildir_index_sync_context;
int maildir_sync_is_synced(struct maildir_mailbox *mbox);
struct mailbox_sync_context *
maildir_storage_sync_init(struct mailbox *box, enum mailbox_sync_flags flags);
int maildir_storage_sync_force(struct maildir_mailbox *mbox, uint32_t uid);
int maildir_sync_header_refresh(struct maildir_mailbox *mbox);
int maildir_sync_index_begin(struct maildir_mailbox *mbox,
struct maildir_sync_context *maildir_sync_ctx,
struct maildir_index_sync_context **ctx_r)
ATTR_NULL(2);
int maildir_sync_index(struct maildir_index_sync_context *sync_ctx,
bool partial);
int maildir_sync_index_commit(struct maildir_index_sync_context **_ctx);
void maildir_sync_index_rollback(struct maildir_index_sync_context **_ctx);
struct maildir_keywords_sync_ctx *
maildir_sync_get_keywords_sync_ctx(struct maildir_index_sync_context *ctx);
void maildir_sync_set_racing(struct maildir_sync_context *ctx);
void maildir_sync_notify(struct maildir_sync_context *ctx);
void maildir_sync_set_new_msgs_count(struct maildir_index_sync_context *ctx,
unsigned int count);
int maildir_sync_refresh_flags_view(struct maildir_mailbox *mbox);
int maildir_sync_lookup(struct maildir_mailbox *mbox, uint32_t uid,
enum maildir_uidlist_rec_flag *flags_r,
const char **fname_r);
int maildir_list_index_has_changed(struct mailbox *box,
struct mail_index_view *list_view,
uint32_t seq, bool quick,
const char **reason_r);
void maildir_list_index_update_sync(struct mailbox *box,
struct mail_index_transaction *trans,
uint32_t seq);
#endif
|