ITS#7789 Fix resize vs MDB_NOMETASYNC, and a comment.

robust
Hallvard Furuseth 11 years ago committed by Hallvard Furuseth
parent bda6a60ad4
commit 02285aca58
  1. 2
      libraries/liblmdb/lmdb.h
  2. 8
      libraries/liblmdb/mdb.c

@ -411,7 +411,7 @@ typedef enum MDB_cursor_op {
#define MDB_CURSOR_FULL (-30787) #define MDB_CURSOR_FULL (-30787)
/** Page has not enough space - internal error */ /** Page has not enough space - internal error */
#define MDB_PAGE_FULL (-30786) #define MDB_PAGE_FULL (-30786)
/** Database contents grew beyond environment mapsize */ /** Environment mapsize was changed by another process */
#define MDB_MAP_RESIZED (-30785) #define MDB_MAP_RESIZED (-30785)
/** MDB_INCOMPATIBLE: Operation and DB incompatible, or DB flags changed */ /** MDB_INCOMPATIBLE: Operation and DB incompatible, or DB flags changed */
#define MDB_INCOMPATIBLE (-30784) #define MDB_INCOMPATIBLE (-30784)

@ -3323,7 +3323,6 @@ mdb_txn_commit(MDB_txn *txn)
#endif #endif
if ((rc = mdb_page_flush(txn, 0)) || if ((rc = mdb_page_flush(txn, 0)) ||
(rc = mdb_env_sync(env, 0)) ||
(rc = mdb_env_write_meta(txn))) (rc = mdb_env_write_meta(txn)))
goto fail; goto fail;
@ -3480,7 +3479,7 @@ mdb_env_init_meta(MDB_env *env, MDB_meta *meta)
static int static int
mdb_env_write_meta(MDB_txn *txn) mdb_env_write_meta(MDB_txn *txn)
{ {
MDB_env *env; MDB_env *env = txn->mt_env;
MDB_meta meta, metab, *mp; MDB_meta meta, metab, *mp;
off_t off; off_t off;
int rc, len, toggle; int rc, len, toggle;
@ -3492,11 +3491,14 @@ mdb_env_write_meta(MDB_txn *txn)
int r2; int r2;
#endif #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; toggle = txn->mt_txnid & 1;
DPRINTF(("writing meta page %d for root page %"Z"u", DPRINTF(("writing meta page %d for root page %"Z"u",
toggle, txn->mt_dbs[MAIN_DBI].md_root)); toggle, txn->mt_dbs[MAIN_DBI].md_root));
env = txn->mt_env;
mp = env->me_metas[toggle]; mp = env->me_metas[toggle];
if (env->me_flags & MDB_WRITEMAP) { if (env->me_flags & MDB_WRITEMAP) {

Loading…
Cancel
Save