dovecot: Update cache->st_ino and st_dev after compressing.

dovecot at dovecot.org dovecot at dovecot.org
Fri Nov 16 23:55:35 EET 2007


details:   http://hg.dovecot.org/dovecot/rev/ee1c4c3d5e5a
changeset: 6823:ee1c4c3d5e5a
user:      Timo Sirainen <tss at iki.fi>
date:      Fri Nov 16 23:55:31 2007 +0200
description:
Update cache->st_ino and st_dev after compressing.

diffstat:

1 file changed, 10 insertions(+), 1 deletion(-)
src/lib-index/mail-cache-compress.c |   11 ++++++++++-

diffs (35 lines):

diff -r f814eecd75cd -r ee1c4c3d5e5a src/lib-index/mail-cache-compress.c
--- a/src/lib-index/mail-cache-compress.c	Fri Nov 16 20:19:40 2007 +0200
+++ b/src/lib-index/mail-cache-compress.c	Fri Nov 16 23:55:31 2007 +0200
@@ -346,7 +346,8 @@ static int mail_cache_compress_locked(st
 				      bool *unlock)
 {
 	struct dotlock *dotlock;
-        mode_t old_mask;
+	struct stat st;
+	mode_t old_mask;
 	uint32_t file_seq, old_offset;
 	ARRAY_TYPE(uint32_t) ext_offsets;
 	const uint32_t *offsets;
@@ -394,6 +395,12 @@ static int mail_cache_compress_locked(st
 	}
 
 	if (mail_cache_copy(cache, trans, fd, &file_seq, &ext_offsets) < 0) {
+		(void)file_dotlock_delete(&dotlock);
+		return -1;
+	}
+
+	if (fstat(fd, &st) < 0) {
+		mail_cache_set_syscall_error(cache, "fstat()");
 		(void)file_dotlock_delete(&dotlock);
 		return -1;
 	}
@@ -426,6 +433,8 @@ static int mail_cache_compress_locked(st
 
 	mail_cache_file_close(cache);
 	cache->fd = fd;
+	cache->st_ino = st.st_ino;
+	cache->st_dev = st.st_dev;
 
 	if (cache->file_cache != NULL)
 		file_cache_set_fd(cache->file_cache, cache->fd);


More information about the dovecot-cvs mailing list