Mercurial > dovecot > original-hg > dovecot-1.2
changeset 2867:d416b6d0a7ee HEAD
More correct file cache invalidating.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 08 Nov 2004 02:55:02 +0200 |
parents | bf1e718e7370 |
children | 316756b50150 |
files | src/lib-index/mail-cache-fields.c src/lib-index/mail-cache-transaction.c src/lib-index/mail-cache.c |
diffstat | 3 files changed, 17 insertions(+), 34 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-index/mail-cache-fields.c Mon Nov 08 02:40:36 2004 +0200 +++ b/src/lib-index/mail-cache-fields.c Mon Nov 08 02:55:02 2004 +0200 @@ -108,6 +108,12 @@ } offset = next_offset; + if (cache->file_cache != NULL) { + /* we can't trust that the cached data is valid */ + file_cache_invalidate(cache->file_cache, offset, + sizeof(*field_hdr) + + CACHE_HDR_PREFETCH); + } if (mail_cache_map(cache, offset, sizeof(*field_hdr) + CACHE_HDR_PREFETCH) < 0) return -1; @@ -155,6 +161,12 @@ } if (field_hdr->size > sizeof(*field_hdr) + CACHE_HDR_PREFETCH) { + if (cache->file_cache != NULL) { + /* we can't trust that the cached data is valid */ + file_cache_invalidate(cache->file_cache, offset, + sizeof(*field_hdr) + + CACHE_HDR_PREFETCH); + } if (mail_cache_map(cache, offset, field_hdr->size) < 0) return -1; } @@ -268,7 +280,6 @@ int locked = cache->locked; buffer_t *buffer; uint32_t i, offset; - size_t size; int ret = 0; if (!locked) { @@ -288,8 +299,6 @@ copy_to_buf(cache, buffer, offsetof(struct mail_cache_field_private, last_used), sizeof(uint32_t)); - size = buffer->used; - ret = pwrite_full(cache->fd, buffer->data, sizeof(uint32_t) * cache->file_fields_count, offset + MAIL_CACHE_FIELD_LAST_USED()); @@ -297,7 +306,6 @@ buffer_set_used_size(buffer, 0); copy_to_buf_byte(cache, buffer, offsetof(struct mail_cache_field, decision)); - size += buffer->used; ret = pwrite_full(cache->fd, buffer->data, sizeof(uint8_t) * cache->file_fields_count, offset + @@ -310,11 +318,8 @@ } t_pop(); - if (ret == 0) { + if (ret == 0) cache->field_header_write_pending = FALSE; - if (cache->file_cache != NULL) - file_cache_invalidate(cache->file_cache, offset, size); - } if (!locked) mail_cache_unlock(cache);
--- a/src/lib-index/mail-cache-transaction.c Mon Nov 08 02:40:36 2004 +0200 +++ b/src/lib-index/mail-cache-transaction.c Mon Nov 08 02:55:02 2004 +0200 @@ -171,10 +171,6 @@ mail_cache_set_syscall_error(cache, "pwrite_full()"); return FALSE; } - if (cache->file_cache != NULL) { - file_cache_invalidate(cache->file_cache, prev_offset, - sizeof(hole.next_offset)); - } } hdr->deleted_space -= hole.size; cache->hdr_modified = TRUE; @@ -290,11 +286,6 @@ return; } - if (cache->file_cache != NULL) { - file_cache_invalidate(cache->file_cache, offset, - sizeof(hole)); - } - cache->hdr_copy.deleted_space += size; cache->hdr_copy.hole_offset = offset; cache->hdr_modified = TRUE; @@ -491,10 +482,6 @@ mail_cache_set_syscall_error(cache, "pwrite_full()"); return -1; } - if (cache->file_cache != NULL) { - file_cache_invalidate(cache->file_cache, - write_offset, max_size); - } size = mail_cache_transaction_update_index(ctx, rec, seq, &seq_idx, seq_limit, @@ -654,11 +641,6 @@ ret = -1; else { /* after it's guaranteed to be in disk, update header offset */ - if (cache->file_cache != NULL) { - file_cache_invalidate(cache->file_cache, offset, size); - file_cache_invalidate(cache->file_cache, hdr_offset, - sizeof(offset)); - } offset = mail_index_uint32_to_offset(offset); if (pwrite_full(cache->fd, &offset, sizeof(offset), hdr_offset) < 0) { @@ -750,10 +732,6 @@ mail_cache_set_syscall_error(cache, "pwrite_full()"); return -1; } - if (cache->file_cache != NULL) { - file_cache_invalidate(cache->file_cache, - new_offset, sizeof(old_offset)); - } return 0; }
--- a/src/lib-index/mail-cache.c Mon Nov 08 02:40:36 2004 +0200 +++ b/src/lib-index/mail-cache.c Mon Nov 08 02:55:02 2004 +0200 @@ -345,6 +345,10 @@ if (ret > 0) { /* make sure our header is up to date */ + if (cache->file_cache != NULL) { + file_cache_invalidate(cache->file_cache, 0, + sizeof(struct mail_cache_header)); + } if (mail_cache_map(cache, 0, 0) < 0) ret = -1; cache->hdr_copy = *cache->hdr; @@ -390,10 +394,6 @@ if (pwrite_full(cache->fd, &cache->hdr_copy, sizeof(cache->hdr_copy), 0) < 0) mail_cache_set_syscall_error(cache, "pwrite_full()"); - if (cache->file_cache != NULL) { - file_cache_invalidate(cache->file_cache, 0, - sizeof(cache->hdr_copy)); - } mail_cache_update_need_compress(cache); }