From: Timo Sirainen Date: Wed, 15 May 2013 10:36:43 +0000 (+0300) Subject: lib-index: Don't mark field decisions dirty when registering initial cache fields. X-Git-Tag: 2.2.2~19 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c2d7c8a808e78ed256346fb8529a565dc68e92cc;p=thirdparty%2Fdovecot%2Fcore.git lib-index: Don't mark field decisions dirty when registering initial cache fields. --- diff --git a/src/lib-index/mail-cache-fields.c b/src/lib-index/mail-cache-fields.c index 3cbfc4a997..084331ea3d 100644 --- a/src/lib-index/mail-cache-fields.c +++ b/src/lib-index/mail-cache-fields.c @@ -70,18 +70,26 @@ mail_cache_field_update(struct mail_cache *cache, const struct mail_cache_field *newfield) { struct mail_cache_field_private *orig; + bool initial_registering; i_assert(newfield->type < MAIL_CACHE_FIELD_COUNT); + /* are we still doing the initial cache field registering for + internal fields and for mail_*cache_fields settings? */ + initial_registering = cache->file_fields_count == 0; + orig = &cache->fields[newfield->idx]; if ((newfield->decision & MAIL_CACHE_DECISION_FORCED) != 0 || - newfield->decision > orig->field.decision) { + ((orig->field.decision & MAIL_CACHE_DECISION_FORCED) == 0 && + newfield->decision > orig->field.decision)) { orig->field.decision = newfield->decision; - orig->decision_dirty = TRUE; + if (!initial_registering) + orig->decision_dirty = TRUE; } if (orig->field.last_used < newfield->last_used) { orig->field.last_used = newfield->last_used; - orig->decision_dirty = TRUE; + if (!initial_registering) + orig->decision_dirty = TRUE; } if (orig->decision_dirty) cache->field_header_write_pending = TRUE;