[dovecot-cvs] dovecot/src/lib-index mail-index.c,1.68,1.69

cras at procontrol.fi cras at procontrol.fi
Mon Nov 4 11:31:38 EET 2002


Update of /home/cvs/dovecot/src/lib-index
In directory danu:/tmp/cvs-serv22648

Modified Files:
	mail-index.c 
Log Message:
Setting index file's timestamp was done too early - there was msync()
immediately after it to reset the timestamp again.



Index: mail-index.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-index/mail-index.c,v
retrieving revision 1.68
retrieving revision 1.69
diff -u -d -r1.68 -r1.69
--- mail-index.c	4 Nov 2002 04:47:40 -0000	1.68
+++ mail-index.c	4 Nov 2002 09:31:36 -0000	1.69
@@ -176,7 +176,6 @@
 
 static int mail_index_sync_file(MailIndex *index)
 {
-	struct utimbuf ut;
 	unsigned int i;
 	int failed, fsync_fds[3];
 
@@ -204,23 +203,28 @@
 			failed = TRUE;
 	}
 
-	/* keep index's modify stamp same as the sync file's stamp */
-	ut.actime = ioloop_time;
-	ut.modtime = index->file_sync_stamp;
-	if (utime(index->filepath, &ut) < 0)
-		return index_set_syscall_error(index, "utime()");
-
 	for (i = 0; i < sizeof(fsync_fds)/sizeof(fsync_fds[0]); i++) {
 		if (fsync_fds[i] != -1 && fdatasync(fsync_fds[i]) < 0)
 			index_set_error(index, "fdatasync(%u) failed: %m", i);
 	}
 
-	if (fsync(index->fd) < 0)
-		return index_set_syscall_error(index, "fsync()");
+	if (fdatasync(index->fd) < 0)
+		return index_set_syscall_error(index, "fdatasync()");
 
 	return !failed;
 }
 
+static void mail_index_update_timestamp(MailIndex *index)
+{
+	struct utimbuf ut;
+
+	/* keep index's modify stamp same as the sync file's stamp */
+	ut.actime = ioloop_time;
+	ut.modtime = index->file_sync_stamp;
+	if (utime(index->filepath, &ut) < 0)
+		index_set_syscall_error(index, "utime()");
+}
+
 int mail_index_fmdatasync(MailIndex *index, size_t size)
 {
 	i_assert(index->lock_type == MAIL_LOCK_EXCLUSIVE);
@@ -427,6 +431,8 @@
 				index_set_syscall_error(index, "msync()");
 			}
 		}
+
+		mail_index_update_timestamp(index);
 	}
 
 	if (lock_type == MAIL_LOCK_UNLOCK)




More information about the dovecot-cvs mailing list