[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