From: Hallvard Furuseth Date: Tue, 27 Nov 2012 22:56:47 +0000 (+0100) Subject: mdb_env_sync(,force=1): Override MDB_MAPASYNC. X-Git-Tag: OPENLDAP_REL_ENG_2_4_34~103^2~7 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=97ed96206d10c29c5612ef38db9c37de23005871;p=openldap mdb_env_sync(,force=1): Override MDB_MAPASYNC. With MDB_MAPASYNC, the API provided no way to ensure full sync. --- diff --git a/libraries/libmdb/mdb.c b/libraries/libmdb/mdb.c index b11edb96f8..251ab6ac0b 100644 --- a/libraries/libmdb/mdb.c +++ b/libraries/libmdb/mdb.c @@ -1523,7 +1523,8 @@ mdb_env_sync(MDB_env *env, int force) int rc = 0; if (force || !F_ISSET(env->me_flags, MDB_NOSYNC)) { if (env->me_flags & MDB_WRITEMAP) { - int flags = (env->me_flags & MDB_MAPASYNC) ? MS_ASYNC : MS_SYNC; + int flags = ((env->me_flags & MDB_MAPASYNC) && !force) + ? MS_ASYNC : MS_SYNC; if (MDB_MSYNC(env->me_map, env->me_mapsize, flags)) rc = ErrCode(); #ifdef _WIN32 diff --git a/libraries/libmdb/mdb.h b/libraries/libmdb/mdb.h index 2fcf132c05..332003462d 100644 --- a/libraries/libmdb/mdb.h +++ b/libraries/libmdb/mdb.h @@ -500,9 +500,9 @@ int mdb_env_info(MDB_env *env, MDB_envinfo *stat); * the OS buffers upon commit as well, unless the environment was * opened with #MDB_NOSYNC. * @param[in] env An environment handle returned by #mdb_env_create() - * @param[in] force If non-zero, force the flush to occur. Otherwise + * @param[in] force If non-zero, force a synchronous flush. Otherwise * if the environment has the #MDB_NOSYNC flag set the flushes - * will be omitted. + * will be omitted, and with #MDB_MAPASYNC they will be asynchronous. * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *