]> git.sur5r.net Git - openldap/commitdiff
mdb_env_sync(,force=1): Override MDB_MAPASYNC.
authorHallvard Furuseth <hallvard@openldap.org>
Tue, 27 Nov 2012 22:56:47 +0000 (23:56 +0100)
committerHallvard Furuseth <hallvard@openldap.org>
Tue, 27 Nov 2012 23:59:00 +0000 (00:59 +0100)
With MDB_MAPASYNC, the API provided no way to ensure full sync.

libraries/libmdb/mdb.c
libraries/libmdb/mdb.h

index b11edb96f881598b9d525b3246976ba843a84d5c..251ab6ac0bdb889ca8ebaa970c3e9a6384fa5008 100644 (file)
@@ -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
index 2fcf132c05b4a05add4a24f822db370f7a0ca222..332003462d4005dd1ce60a3cf270e3c961ea20ea 100644 (file)
@@ -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:
         * <ul>