commit 3c2e7eadcc0ed083e94f5c4c62663772869a3038
Author: Oswald Buddenhagen <[email protected]>
Date: Sun Sep 9 12:18:14 2012 +0200
call fdatasync() after updating .uidvalidity files
they must be flushed before the file system meta data, as otherwise we
may end up with duplicate UIDs after a system crash.
src/drv_maildir.c | 6 +++++-
1 files changed, 5 insertions(+), 1 deletions(-)
diff --git a/src/drv_maildir.c b/src/drv_maildir.c
index a9f5790..771cf48 100644
--- a/src/drv_maildir.c
+++ b/src/drv_maildir.c
@@ -42,6 +42,10 @@
# define LEGACY_FLOCK 1
#endif
+#ifndef _POSIX_SYNCHRONIZED_IO
+# define fdatasync fsync
+#endif
+
#ifdef USE_DB
#include <db.h>
#endif /* USE_DB */
@@ -428,7 +432,7 @@ maildir_store_uid( maildir_store_t *ctx )
n = sprintf( buf, "%d\n%d\n", ctx->gen.uidvalidity, ctx->nuid );
lseek( ctx->uvfd, 0, SEEK_SET );
- if (write( ctx->uvfd, buf, n ) != n || ftruncate( ctx->uvfd, n )) {
+ if (write( ctx->uvfd, buf, n ) != n || ftruncate( ctx->uvfd, n ) ||
fdatasync( ctx->uvfd )) {
error( "Maildir error: cannot write UIDVALIDITY.\n" );
return DRV_BOX_BAD;
}
------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
isync-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/isync-devel