]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-index: Use a bit larger initial records buffer size
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Fri, 29 Apr 2016 11:07:05 +0000 (14:07 +0300)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Fri, 29 Apr 2016 11:07:51 +0000 (14:07 +0300)
For example with a mailbox having 160k messages the buffer size is around
10MB. Adding just 1% more space to it allows a lot more appends before the
buffer needs to be realloced. This reduces CPU usage quite a lot.

src/lib-index/mail-index-map.c

index 52f9ad02abfe0fd3335d68487cc58fbaadf0840f..f3b14f24877cd27c9350c6ecba0007a6187f485c 100644 (file)
@@ -327,7 +327,9 @@ static void mail_index_map_copy_records(struct mail_index_record_map *dest,
        size_t size;
 
        size = src->records_count * record_size;
-       dest->buffer = buffer_create_dynamic(default_pool, I_MAX(size, 1024));
+       /* +1% so we have a bit of space to grow. useful for huge mailboxes. */
+       dest->buffer = buffer_create_dynamic(default_pool,
+                                            size + I_MAX(size/100, 1024));
        buffer_append(dest->buffer, src->records, size);
 
        dest->records = buffer_get_modifiable_data(dest->buffer, NULL);