]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
imapc-quota: Avoid sending unnecessarily many GETQUOTA[ROOT] commands
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Fri, 12 May 2017 12:42:31 +0000 (15:42 +0300)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Tue, 16 May 2017 07:35:49 +0000 (10:35 +0300)
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

index 2cc6527d73a08ee440d0bc9d73dce1f8d6a00f88..a3d64941dde85b35a19f14b70a6f97df82055200 100644 (file)
@@ -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)