From 657d37c9e39c647e0d8076b9b0ee9e0b2afeee88 Mon Sep 17 00:00:00 2001 From: Leonid Yuriev Date: Tue, 20 Aug 2019 02:45:03 +0300 Subject: [PATCH] mdbx: add MDBX_OSX_SPEED_OR_DURABILITY build-time #define for MacOS. --- src/bits.h | 6 ++++++ src/osal.c | 11 +++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/bits.h b/src/bits.h index aded72c8..7660e50e 100644 --- a/src/bits.h +++ b/src/bits.h @@ -23,6 +23,12 @@ # undef NDEBUG #endif +#define MDBX_OSX_WANNA_DURABILITY 0 /* using fcntl(F_FULLFSYNC) with 5-10 times slowdown */ +#define MDBX_OSX_WANNA_SPEED 1 /* using fsync() with chance of data lost on power failure */ +#ifndef MDBX_OSX_SPEED_OR_DURABILITY +#define MDBX_OSX_SPEED_OR_DURABILITY MDBX_OSX_WANNA_DURABILITY +#endif + /*----------------------------------------------------------------------------*/ /* Should be defined before any includes */ diff --git a/src/osal.c b/src/osal.c index 141c010a..0f5a4f7a 100644 --- a/src/osal.c +++ b/src/osal.c @@ -668,7 +668,8 @@ int mdbx_filesync(mdbx_filehandle_t fd, enum mdbx_syncmode_bits mode_bits) { : GetLastError(); #else -#ifdef __APPLE__ +#if defined(__APPLE__) && \ + MDBX_OSX_SPEED_OR_DURABILITY == MDBX_OSX_WANNA_DURABILITY if (mode_bits & MDBX_SYNC_IODQ) return likely(fcntl(fd, F_FULLFSYNC) != -1) ? MDBX_SUCCESS : errno; #endif /* MacOS */ @@ -788,7 +789,13 @@ int mdbx_msync(mdbx_mmap_t *map, size_t offset, size_t length, int async) { return GetLastError(); #else const int mode = async ? MS_ASYNC : MS_SYNC; - return (msync(ptr, length, mode) == 0) ? MDBX_SUCCESS : errno; + int rc = (msync(ptr, length, mode) == 0) ? MDBX_SUCCESS : errno; +#if defined(__APPLE__) && \ + MDBX_OSX_SPEED_OR_DURABILITY == MDBX_OSX_WANNA_DURABILITY + if (rc == MDBX_SUCCESS && mode == MS_SYNC) + rc = likely(fcntl(map->fd, F_FULLFSYNC) != -1) ? MDBX_SUCCESS : errno; +#endif /* MacOS */ + return rc; #endif }