From dee1520b5166708bd8dd4230c279c950bf01029a Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Fri, 12 May 2017 15:42:31 +0300 Subject: [PATCH] imapc-quota: Avoid sending unnecessarily many GETQUOTA[ROOT] commands The last_refresh == ioloop_timeval check didn't work, because the refresh itself updated ioloop_timeval. This caused a single quota lookup to issue multiple GETQUOTA[ROOT] commands to imapc. --- src/plugins/quota/quota-imapc.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/plugins/quota/quota-imapc.c b/src/plugins/quota/quota-imapc.c index 2cc6527d73..a3d64941dd 100644 --- a/src/plugins/quota/quota-imapc.c +++ b/src/plugins/quota/quota-imapc.c @@ -346,6 +346,7 @@ static int imapc_quota_refresh_root(struct imapc_quota_root *root) static int imapc_quota_refresh(struct imapc_quota_root *root) { enum imapc_capability capa; + int ret; if (root->imapc_ns == NULL) { /* imapc namespace is missing - disable this quota backend */ @@ -366,11 +367,14 @@ static int imapc_quota_refresh(struct imapc_quota_root *root) return 0; } - root->last_refresh = ioloop_timeval; if (root->root_name == NULL) - return imapc_quota_refresh_mailbox(root); + ret = imapc_quota_refresh_mailbox(root); else - return imapc_quota_refresh_root(root); + ret = imapc_quota_refresh_root(root); + /* set the last_refresh only after the refresh, because it changes + ioloop_timeval. */ + root->last_refresh = ioloop_timeval; + return ret; } static int imapc_quota_init_limits(struct quota_root *_root)