changeset 14885:0b0399f1b6aa

lib-index: Fixed invalidating buffered cache file with map_with_read.
author Timo Sirainen <tss@iki.fi>
date Tue, 29 Jan 2013 17:55:20 +0200
parents 99b7be36631b
children b314c97d4bbf
files src/lib-index/mail-cache-fields.c src/lib-index/mail-cache-sync-update.c src/lib-index/mail-cache.c
diffstat 3 files changed, 9 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-index/mail-cache-fields.c	Tue Jan 22 16:53:52 2013 +0200
+++ b/src/lib-index/mail-cache-fields.c	Tue Jan 29 17:55:20 2013 +0200
@@ -285,6 +285,8 @@
 			file_cache_invalidate(cache->file_cache, offset,
 					      field_hdr_size);
 		}
+		if (cache->read_buf != NULL && invalidate)
+			buffer_set_used_size(cache->read_buf, 0);
 		ret = mail_cache_map(cache, offset, field_hdr_size, &data);
 		if (ret < 0)
 			return -1;
--- a/src/lib-index/mail-cache-sync-update.c	Tue Jan 22 16:53:52 2013 +0200
+++ b/src/lib-index/mail-cache-sync-update.c	Tue Jan 29 17:55:20 2013 +0200
@@ -1,6 +1,7 @@
 /* Copyright (c) 2004-2012 Dovecot authors, see the included COPYING file */
 
 #include "lib.h"
+#include "buffer.h"
 #include "file-cache.h"
 #include "mail-cache-private.h"
 #include "mail-index-view-private.h"
@@ -144,6 +145,8 @@
 					      ctx->invalidate_highwater -
 					      *new_cache_offset);
 			ctx->invalidate_highwater = *new_cache_offset;
+			if (cache->read_buf != NULL)
+				buffer_set_used_size(cache->read_buf, 0);
 		}
 	}
 
@@ -188,4 +191,6 @@
 					    cache->fd, cache->locked);
 	}
 	file_cache_invalidate(cache->file_cache, 0, (uoff_t)-1);
+	if (cache->read_buf != NULL)
+		buffer_set_used_size(cache->read_buf, 0);
 }
--- a/src/lib-index/mail-cache.c	Tue Jan 22 16:53:52 2013 +0200
+++ b/src/lib-index/mail-cache.c	Tue Jan 29 17:55:20 2013 +0200
@@ -705,6 +705,8 @@
 			file_cache_invalidate(cache->file_cache, 0,
 					      sizeof(struct mail_cache_header));
 		}
+		if (cache->read_buf != NULL)
+			buffer_set_used_size(cache->read_buf, 0);
 		if (mail_cache_map(cache, 0, 0, &data) > 0)
 			cache->hdr_copy = *cache->hdr;
 		else {