[Dovecot] Bug: maidirsize double counting moved messages
Bill Boebel
bill at webmail.us
Thu May 18 18:34:11 EEST 2006
On Thu, May 18, 2006 9:49, Bill Boebel said:
> This size doubling is happening for any IMAP APPEND operation as well. It
> has been a pretty annoying bug, because we have to keep manually deleting
> maildirsize files to fix mailboxes so that they don't bounce mail due to
> the quota miscalculation. Timo, is this something you could take a look
> at?
>
The problem appears to be that quota_default_try_alloc_bytes() is getting
called twice during APPEND. Once from quota_save_init() when it is trying
to guess if there is enough room to save the new message, and then again
while actually performing the save in quota_save_finish():
quota_save_init()
quota_try_alloc_bytes()
quota_save_finish()
quota_check()
quota_try_alloc()
quota_default_try_alloc_bytes()
I added a quick hack to use the existing bool parameter "too_large" as a
flag to tell quota_default_try_alloc_bytes() whether or not to allocate
bytes or just check if there is room to allocate bytes. I'm sure it is
trivial to clean this up and pass this flag as a new parameter, but I
didn't want to break any other functions that might be calling this...
src/plugins/quota/quota-storage.c
@185 (quota_save_init)
/* BB 05/18/2006 - Hack: set "too_large=TRUE" to tell quota_try_alloc_bytes
to not actuall allocate the bytes yet. That will be done later */
too_large = TRUE;
src/plugins/quota/quota.c
@375 (quota_default_try_alloc_bytes)
/* BB 05/18/2006 - Hack: use too_large_r=TRUE as a flag to just check if
we can allocate bytes, but don't actually allocate it yet since this
function is called again later */
bool alloc_bytes;
if (*too_large_r == TRUE)
alloc_bytes = FALSE;
else
alloc_bytes = TRUE;
@400 (quota_default_try_alloc_bytes)
/* BB 05/18/2006 - Hack: skip if we just want to check if we have enough
room */
if (alloc_bytes) {
ctx->count_diff++;
ctx->bytes_diff += size;
}
More information about the dovecot
mailing list