From: Timo Sirainen Date: Tue, 26 Jun 2018 19:33:33 +0000 (+0300) Subject: quota-clone: Fix assert-crash at deinit if quota_clone update fails X-Git-Tag: 2.3.9~1665 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0aeddafb0d047a3edbdfaf13417043102e5abff7;p=thirdparty%2Fdovecot%2Fcore.git quota-clone: Fix assert-crash at deinit if quota_clone update fails 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) --- diff --git a/src/plugins/quota-clone/quota-clone-plugin.c b/src/plugins/quota-clone/quota-clone-plugin.c index 28a38cade8..489276acd9 100644 --- a/src/plugins/quota-clone/quota-clone-plugin.c +++ b/src/plugins/quota-clone/quota-clone-plugin.c @@ -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); }