]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
quota-clone: Fix assert-crash at deinit if quota_clone update fails
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Tue, 26 Jun 2018 19:33:33 +0000 (22:33 +0300)
committerAki Tuomi <aki.tuomi@dovecot.fi>
Tue, 7 Aug 2018 09:36:36 +0000 (12:36 +0300)
The timeout isn't removed on failure, so it crashed with:
Panic: file quota-clone-plugin.c: line 257 (quota_clone_mail_user_deinit_pre): assertion failed: (quser->to_quota_flush == NULL)

src/plugins/quota-clone/quota-clone-plugin.c

index 3f10bf3968b564f90f08cfa6c0262e3701dc72c7..d01f1b052a0d04083c9f4b5148e139eb71f50564 100644 (file)
@@ -240,7 +240,9 @@ static void quota_clone_mail_user_deinit_pre(struct mail_user *user)
                i_assert(!quser->quota_flushing);
                quota_clone_flush(user);
                dict_wait(quser->dict);
-               i_assert(quser->to_quota_flush == NULL);
+               /* If dict update fails or background calculation is running,
+                  the timeout is still set. Just forget about it. */
+               timeout_remove(&quser->to_quota_flush);
        }
        quser->module_ctx.super.deinit_pre(user);
 }