From: Timo Sirainen Date: Wed, 17 May 2017 16:01:57 +0000 (+0300) Subject: lib-storage: Implement mailbox_list_notify_flush() X-Git-Tag: 2.3.0.rc1~1592 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=58a89627905e3590381cdd5eb931b9537c4b4ea6;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Implement mailbox_list_notify_flush() This flushes any pending notifications. For now it only checks if there's a pending notification waiting for a timeout. It could also stat() the files to make sure, but that's probably unnecessary. --- diff --git a/src/lib-storage/list/mailbox-list-index-notify.c b/src/lib-storage/list/mailbox-list-index-notify.c index 24251b2dcf..d3516208df 100644 --- a/src/lib-storage/list/mailbox-list-index-notify.c +++ b/src/lib-storage/list/mailbox-list-index-notify.c @@ -876,3 +876,12 @@ void mailbox_list_index_notify_wait(struct mailbox_list_notify *notify, notify_update_stat(inotify); } } + +void mailbox_list_index_notify_flush(struct mailbox_list_notify *notify) +{ + struct mailbox_list_notify_index *inotify = + (struct mailbox_list_notify_index *)notify; + + if (inotify->to_notify != NULL) + notify_now_callback(inotify); +} diff --git a/src/lib-storage/list/mailbox-list-index.c b/src/lib-storage/list/mailbox-list-index.c index 052b4c19b7..f1e851f151 100644 --- a/src/lib-storage/list/mailbox-list-index.c +++ b/src/lib-storage/list/mailbox-list-index.c @@ -772,6 +772,7 @@ static void mailbox_list_index_created(struct mailbox_list *list) v->notify_next = mailbox_list_index_notify_next; v->notify_deinit = mailbox_list_index_notify_deinit; v->notify_wait = mailbox_list_index_notify_wait; + v->notify_flush = mailbox_list_index_notify_flush; MODULE_CONTEXT_SET(list, mailbox_list_index_module, ilist); diff --git a/src/lib-storage/list/mailbox-list-index.h b/src/lib-storage/list/mailbox-list-index.h index 4825c3189c..02dc4828b4 100644 --- a/src/lib-storage/list/mailbox-list-index.h +++ b/src/lib-storage/list/mailbox-list-index.h @@ -198,6 +198,7 @@ int mailbox_list_index_notify_next(struct mailbox_list_notify *notify, void mailbox_list_index_notify_wait(struct mailbox_list_notify *notify, void (*callback)(void *context), void *context); +void mailbox_list_index_notify_flush(struct mailbox_list_notify *notify); void mailbox_list_index_status_init_mailbox(struct mailbox_vfuncs *v); void mailbox_list_index_backend_init_mailbox(struct mailbox *box, diff --git a/src/lib-storage/mailbox-list-notify.c b/src/lib-storage/mailbox-list-notify.c index 842177e95e..5e3ace1c5f 100644 --- a/src/lib-storage/mailbox-list-notify.c +++ b/src/lib-storage/mailbox-list-notify.c @@ -33,3 +33,9 @@ void mailbox_list_notify_wait(struct mailbox_list_notify *notify, { notify->list->v.notify_wait(notify, callback, context); } + +void mailbox_list_notify_flush(struct mailbox_list_notify *notify) +{ + if (notify->list->v.notify_flush != NULL) + notify->list->v.notify_flush(notify); +} diff --git a/src/lib-storage/mailbox-list-notify.h b/src/lib-storage/mailbox-list-notify.h index 7e63909e65..30f8e11268 100644 --- a/src/lib-storage/mailbox-list-notify.h +++ b/src/lib-storage/mailbox-list-notify.h @@ -56,5 +56,7 @@ int mailbox_list_notify_next(struct mailbox_list_notify *notify, /* Call the specified callback when something changes. */ void mailbox_list_notify_wait(struct mailbox_list_notify *notify, void (*callback)(void *context), void *context); +/* Flush any delayed notifications now. */ +void mailbox_list_notify_flush(struct mailbox_list_notify *notify); #endif diff --git a/src/lib-storage/mailbox-list-private.h b/src/lib-storage/mailbox-list-private.h index a957b0b24e..0d84fa3de8 100644 --- a/src/lib-storage/mailbox-list-private.h +++ b/src/lib-storage/mailbox-list-private.h @@ -89,6 +89,7 @@ struct mailbox_list_vfuncs { void (*notify_deinit)(struct mailbox_list_notify *notify); void (*notify_wait)(struct mailbox_list_notify *notify, void (*callback)(void *context), void *context); + void (*notify_flush)(struct mailbox_list_notify *notify); }; struct mailbox_list_module_register {