From 81e832796cdc6af790ed7be8a6c150889f03171c Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Wed, 19 Jul 2017 23:19:12 +0300 Subject: [PATCH] virtual: Optimize mailbox_notify_changes() when there's only a single backend mailbox --- src/plugins/virtual/virtual-storage.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/plugins/virtual/virtual-storage.c b/src/plugins/virtual/virtual-storage.c index abe4862135..aa038830f6 100644 --- a/src/plugins/virtual/virtual-storage.c +++ b/src/plugins/virtual/virtual-storage.c @@ -711,14 +711,22 @@ static void virtual_notify_changes(struct mailbox *box) } array_foreach_modifiable(&mbox->backend_boxes, bboxp) { - /* we are already waiting for notifications */ - if ((*bboxp)->notify != NULL) - continue; - /* wait for notifications */ - if (virtual_notify_start(*bboxp) == 0) - continue; - /* it did not work, so open the mailbox and use - alternative method */ + if (array_count(&mbox->backend_boxes) == 1 && + (*bboxp)->box->opened) { + /* There's only a single backend mailbox and its + indexes are already opened. Might as well use the + backend directly for notifications. */ + } else { + /* we are already waiting for notifications */ + if ((*bboxp)->notify != NULL) + continue; + /* wait for notifications */ + if (virtual_notify_start(*bboxp) == 0) + continue; + /* it did not work, so open the mailbox and use + alternative method */ + } + if (!(*bboxp)->box->opened && virtual_backend_box_open(mbox, *bboxp) < 0) { /* we can't report error in here, so do it later */