diff options
| author | Riccardo Spagni <ric@spagni.net> | 2017-02-02 21:39:03 +0200 |
|---|---|---|
| committer | Riccardo Spagni <ric@spagni.net> | 2017-02-02 21:39:03 +0200 |
| commit | da9174c8ee02a1a9a40cc23a487d58ccc9174d2d (patch) | |
| tree | b8145de0d8968e1e1183634e18646010255e4a01 | |
| parent | f4fe39ca92de23baca4750455bfa2a6c31592f0f (diff) | |
| parent | edfd7f6e078ce5f038d80007d195579f5ec4bdd0 (diff) | |
| download | monzero-core-da9174c8ee02a1a9a40cc23a487d58ccc9174d2d.tar.gz monzero-core-da9174c8ee02a1a9a40cc23a487d58ccc9174d2d.tar.xz monzero-core-da9174c8ee02a1a9a40cc23a487d58ccc9174d2d.zip | |
Merge pull request #1656
edfd7f6e Workaround VL32 cursor refcounting miscount (Howard Chu)
| -rw-r--r-- | external/db_drivers/liblmdb/mdb.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/external/db_drivers/liblmdb/mdb.c b/external/db_drivers/liblmdb/mdb.c index 32e225163..d778037b0 100644 --- a/external/db_drivers/liblmdb/mdb.c +++ b/external/db_drivers/liblmdb/mdb.c @@ -1953,13 +1953,15 @@ static void mdb_cursor_unref(MDB_cursor *mc) { int i; - if (!mc->mc_snum || !mc->mc_pg[0] || IS_SUBP(mc->mc_pg[0])) - return; - for (i=0; i<mc->mc_snum; i++) - mdb_page_unref(mc->mc_txn, mc->mc_pg[i]); - if (mc->mc_ovpg) { - mdb_page_unref(mc->mc_txn, mc->mc_ovpg); - mc->mc_ovpg = 0; + if (mc->mc_txn->mt_rpages[0].mid) { + if (!mc->mc_snum || !mc->mc_pg[0] || IS_SUBP(mc->mc_pg[0])) + return; + for (i=0; i<mc->mc_snum; i++) + mdb_page_unref(mc->mc_txn, mc->mc_pg[i]); + if (mc->mc_ovpg) { + mdb_page_unref(mc->mc_txn, mc->mc_ovpg); + mc->mc_ovpg = 0; + } } mc->mc_snum = mc->mc_top = 0; mc->mc_pg[0] = NULL; |
