From e2b82098fa592b20cb3ba79ddbf28f2b2a692e39 Mon Sep 17 00:00:00 2001 From: Kris Zyp Date: Wed, 28 Jul 2021 15:03:13 -0600 Subject: [PATCH] ITS#9618 fix Windows WRITEMAP flush Revert back to using standard FlushViewOfFile/FlushFileBuffers to sync data with WRITEMAP mode on Windows --- libraries/liblmdb/mdb.c | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c index a6cc3ab..72c4c43 100644 --- a/libraries/liblmdb/mdb.c +++ b/libraries/liblmdb/mdb.c @@ -3008,9 +3008,9 @@ mdb_env_sync0(MDB_env *env, int force, pgno_t numpgs) int rc = 0; if (env->me_flags & MDB_RDONLY) return EACCES; - if (force -#ifndef _WIN32 /* Sync is normally achieved in Windows by doing WRITE_THROUGH writes */ - || !(env->me_flags & MDB_NOSYNC) + if (force || !(env->me_flags & MDB_NOSYNC) +#ifdef _WIN32 /* Sync is normally achieved in Windows by doing WRITE_THROUGH writes */ + && (env->me_flags & MDB_WRITEMAP) #endif ) { if (env->me_flags & MDB_WRITEMAP) { @@ -3958,13 +3958,7 @@ mdb_page_flush(MDB_txn *txn, int keep) j = i = keep; - if (env->me_flags & MDB_WRITEMAP -#ifdef _WIN32 - /* In windows, we still do writes to the file (with write-through enabled in sync mode), - * as this is faster than FlushViewOfFile/FlushFileBuffers */ - && (env->me_flags & MDB_NOSYNC) -#endif - ) { + if (env->me_flags & MDB_WRITEMAP) { goto done; }