[Dovecot] (mail_index_sync_update_index): assertion failed
Anyone run into this one? I'm using test53...
Dec 3 13:08:17 aurora dovecot: IMAP(doug): file mail-index-sync-update.c: line 1160 (mail_index_sync_update_index): assertion failed: (map->records_count == map->hdr.messages_count) Dec 3 13:08:17 aurora dovecot: child 65942 (imap) killed with signal 6
It doesn't seem to correlate with any particular action. The only change I make to the compilation is to comment out #define HAVE_FREEBSD_SENDFILE
Thanks,
Doug
Anyone have a hint as to how I might successfully debug this problem?
Dec 6 11:19:38 aurora dovecot: IMAP(doug): Corrupted index cache file /home/doug/Maildir/dovecot.index.cache: record list is circular
Dec 6 11:20:02 aurora dovecot: IMAP(doug): msync() failed with index file /home/doug/Maildir/dovecot.index: Invalid argument
(w/test56)
Thanks,
Doug
From /var/log/maillog:
Dec 8 01:51:46 aurora dovecot: IMAP(doug): msync() failed with index file /home /doug/Maildir/dovecot.index: Invalid argument
From the ktrace that was running on that process:
22124 imap NAMI "/home/doug/Maildir/dovecot.index" 22124 imap RET stat 0 22124 imap CALL fcntl(0x4,0x8,0x11ffe7b8) 22124 imap RET fcntl 0 22124 imap CALL msync(0x130960000,0x1aff4,0) 22124 imap RET msync -1 errno 22 Invalid argument
From man msync:
ERRORS The msync() system call will fail if:
...
[EINVAL] The addr argument is not a multiple of the hardware
page size.
From the command line:
% pagesize 8192
Calculating:
0x1AFF4 = 110580 = 13*8192+4084
Not sure if this is relevant...
Doug
Hi Doug,
I think this might be because there is a space between /home and /doug/Maildir/dovecot.index It would then see the /doug/Maildir/dovecot.index as a second argument.
Regards Andrew
On Wed, 2004-12-08 at 05:12 -0500, Doug Luce wrote:
-- Andrew Hutchings Systems Operator / Developer / Linux Guru Netserve Consultants Ltd. http://www.domaincity.co.uk/
Sorry Doug, just tried to investigate a bit (I am not the best programmer in the world). Msync should be called as follows:
int msync(void *addr, size_t len, int flags);
It looks to me in your case the parameter 2 is supposed to parameter 1 and I don't know what the heck got shoved in parameter 1. Maybe parameter 1 was supposed to be parameter 2 without the 0x??
Regards Andrew
On Wed, 2004-12-08 at 13:31 -0500, Doug Luce wrote:
-- Andrew Hutchings Systems Operator / Developer / Linux Guru Netserve Consultants Ltd. http://www.domaincity.co.uk/
The ktrace output has "msync(0x130960000,0x1aff4,0)." Ktrace doesn't have access to the information from the original source, so it's not able to resolve the first argument to the void pointer. What ktrace shows looks right for the first argument, though -- a full 32-bit address.
The second looks like it's within a valid range as well, as is the third.
The problem I'm seeing is that the second argument is not a multiple of the machine's pagesize. The man page says that such an issue will result in the error as seen.
Doug
On Wed, 8 Dec 2004, Andrew Hutchings wrote:
participants (4)
-
Andrew Hutchings
-
Doug Luce
-
doug@dovecot.con.com
-
Timo Sirainen