]> git.sur5r.net Git - openldap/commitdiff
ITS#7789 Fix resize vs MDB_NOMETASYNC, and a comment.
authorHallvard Furuseth <hallvard@openldap.org>
Wed, 9 Jul 2014 18:16:33 +0000 (20:16 +0200)
committerHallvard Furuseth <h.b.furuseth@usit.uio.no>
Wed, 9 Jul 2014 18:16:33 +0000 (20:16 +0200)
libraries/liblmdb/lmdb.h
libraries/liblmdb/mdb.c

index f63c6719e0b8129f4bad5084ed4865ae95f5ca47..2374ef7cc7c23e9b2b6fd0c7313f8bacfc97950c 100644 (file)
@@ -411,7 +411,7 @@ typedef enum MDB_cursor_op {
 #define MDB_CURSOR_FULL        (-30787)
        /** Page has not enough space - internal error */
 #define MDB_PAGE_FULL  (-30786)
-       /** Database contents grew beyond environment mapsize */
+       /** Environment mapsize was changed by another process */
 #define MDB_MAP_RESIZED        (-30785)
        /** MDB_INCOMPATIBLE: Operation and DB incompatible, or DB flags changed */
 #define MDB_INCOMPATIBLE       (-30784)
index dc1bb26093d3d8348d9438f53e9cc26f0db73168..a1199eaa93bfab5768c344f794b9839361ff883c 100644 (file)
@@ -3323,7 +3323,6 @@ mdb_txn_commit(MDB_txn *txn)
 #endif
 
        if ((rc = mdb_page_flush(txn, 0)) ||
-               (rc = mdb_env_sync(env, 0)) ||
                (rc = mdb_env_write_meta(txn)))
                goto fail;
 
@@ -3480,7 +3479,7 @@ mdb_env_init_meta(MDB_env *env, MDB_meta *meta)
 static int
 mdb_env_write_meta(MDB_txn *txn)
 {
-       MDB_env *env;
+       MDB_env *env = txn->mt_env;
        MDB_meta        meta, metab, *mp;
        off_t off;
        int rc, len, toggle;
@@ -3492,11 +3491,14 @@ mdb_env_write_meta(MDB_txn *txn)
        int r2;
 #endif
 
+       /* Sync data and previous metapage before writing a new metapage */
+       if ((rc = mdb_env_sync(env, 0)) != MDB_SUCCESS)
+               return rc;
+
        toggle = txn->mt_txnid & 1;
        DPRINTF(("writing meta page %d for root page %"Z"u",
                toggle, txn->mt_dbs[MAIN_DBI].md_root));
 
-       env = txn->mt_env;
        mp = env->me_metas[toggle];
 
        if (env->me_flags & MDB_WRITEMAP) {