[Dovecot] New to dovecot, little luck - signal 10 death for imap
Timo Sirainen
tss at iki.fi
Wed Jul 13 18:54:47 EEST 2005
On Wed, 2005-07-13 at 15:00 +0100, Chris Wakelin wrote:
> - offset = *((const uint64_t *)data);
> +/* CDW, see -
> http://dovecot.org/pipermail/dovecot/2005-January/005926.html */
> +/* offset = *((const uint64_t *)data); CDW */
> + memcpy(&offset,data,sizeof(uint64_t));
Although this works, this wasn't really how I wanted to fix this. I
think this should work (indexes need to be recreated afterwards):
Index: lib-index/mail-index-sync-ext.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-index-sync-ext.c,v
retrieving revision 1.9
diff -u -r1.9 mail-index-sync-ext.c
--- lib-index/mail-index-sync-ext.c 4 Jul 2005 11:32:20 -0000 1.9
+++ lib-index/mail-index-sync-ext.c 13 Jul 2005 15:50:14 -0000
@@ -169,7 +169,7 @@
struct mail_index_map *new_map;
struct mail_index_ext *ext, **sorted;
struct mail_index_ext_header *ext_hdr;
- uint16_t *old_offsets, min_align;
+ uint16_t *old_offsets, min_align, max_align;
uint32_t offset, old_records_count, rec_idx;
unsigned int i, count;
const void *src;
@@ -192,9 +192,13 @@
requirement first. FIXME: if the extension sizes don't match
alignmentation, this may not give the minimal layout. */
offset = sizeof(struct mail_index_record);
+ max_align = sizeof(uint32_t);
for (;;) {
min_align = (uint16_t)-1;
for (i = 0; i < count; i++) {
+ if (sorted[i]->record_align > max_align)
+ max_align = sorted[i]->record_align;
+
if (sorted[i]->record_offset == 0) {
if ((offset % sorted[i]->record_align) == 0)
break;
@@ -218,9 +222,9 @@
i_assert(offset < (uint16_t)-1);
}
- if ((offset % sizeof(uint32_t)) != 0) {
- /* keep 32bit alignment */
- offset += sizeof(uint32_t) - (offset % sizeof(uint32_t));
+ if ((offset % max_align) != 0) {
+ /* keep record size divisible with maximum alignment */
+ offset += max_align - (offset % max_align);
}
/* create a new mapping without records. a bit kludgy. */
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
URL: <http://dovecot.org/pipermail/dovecot/attachments/20050713/e6a472df/attachment-0001.bin>
More information about the dovecot
mailing list