]> git.sur5r.net Git - openldap/commitdiff
Simpler mdb_env_write_meta()
authorHallvard Furuseth <hallvard@openldap.org>
Sun, 26 Jul 2015 05:20:19 +0000 (07:20 +0200)
committerHallvard Furuseth <hallvard@openldap.org>
Sun, 25 Oct 2015 09:56:39 +0000 (10:56 +0100)
libraries/liblmdb/mdb.c

index 8f29ec560c6be51b6de9188516cb789a25916fe6..746f4165e9580d255d739974d7460b56e9fa932b 100644 (file)
@@ -3694,15 +3694,12 @@ mdb_env_write_meta(MDB_txn *txn)
                if (!(flags & (MDB_NOMETASYNC|MDB_NOSYNC))) {
                        unsigned meta_size = env->me_psize;
                        rc = (env->me_flags & MDB_MAPASYNC) ? MS_ASYNC : MS_SYNC;
-                       ptr = env->me_map;
-                       if (toggle) {
+                       ptr = (char *)mp - PAGEHDRSZ;
 #ifndef _WIN32 /* POSIX msync() requires ptr = start of OS page */
-                               if (meta_size < env->me_os_psize)
-                                       meta_size += meta_size;
-                               else
+                       r2 = (ptr - env->me_map) & (env->me_os_psize - 1);
+                       ptr -= r2;
+                       meta_size += r2;
 #endif
-                                       ptr += meta_size;
-                       }
                        if (MDB_MSYNC(ptr, meta_size, rc)) {
                                rc = ErrCode();
                                goto fail;
@@ -3710,8 +3707,8 @@ mdb_env_write_meta(MDB_txn *txn)
                }
                goto done;
        }
-       metab.mm_txnid = env->me_metas[toggle]->mm_txnid;
-       metab.mm_last_pg = env->me_metas[toggle]->mm_last_pg;
+       metab.mm_txnid = mp->mm_txnid;
+       metab.mm_last_pg = mp->mm_last_pg;
 
        meta.mm_mapsize = mapsize;
        meta.mm_dbs[FREE_DBI] = txn->mt_dbs[FREE_DBI];
@@ -3722,9 +3719,7 @@ mdb_env_write_meta(MDB_txn *txn)
        off = offsetof(MDB_meta, mm_mapsize);
        ptr = (char *)&meta + off;
        len = sizeof(MDB_meta) - off;
-       if (toggle)
-               off += env->me_psize;
-       off += PAGEHDRSZ;
+       off += (char *)mp - env->me_map;
 
        /* Write to the SYNC fd */
        mfd = (flags & (MDB_NOSYNC|MDB_NOMETASYNC)) ? env->me_fd : env->me_mfd;