diff options
| author | Riccardo Spagni <ric@spagni.net> | 2016-04-29 21:41:43 +0200 |
|---|---|---|
| committer | Riccardo Spagni <ric@spagni.net> | 2016-04-29 21:41:43 +0200 |
| commit | 30dce45643378c0607b5457ef6c41600c30fcd58 (patch) | |
| tree | 1b0fc30e376d8684a99dbf5de058bc74566efd5f /external | |
| parent | 8b0d22a2aa5f4a1539f40e276feca3b1879924eb (diff) | |
| parent | 2b0fa05f0d0d3c2aae90225d786d9ba7fcd6a2ff (diff) | |
| download | monzero-core-30dce45643378c0607b5457ef6c41600c30fcd58.tar.gz monzero-core-30dce45643378c0607b5457ef6c41600c30fcd58.tar.xz monzero-core-30dce45643378c0607b5457ef6c41600c30fcd58.zip | |
Merge branch 'performance' of https://github.com/LMDB/bitmonero
Diffstat (limited to 'external')
| -rw-r--r-- | external/db_drivers/liblmdb/mdb.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/external/db_drivers/liblmdb/mdb.c b/external/db_drivers/liblmdb/mdb.c index a366b4024..2d8e458f7 100644 --- a/external/db_drivers/liblmdb/mdb.c +++ b/external/db_drivers/liblmdb/mdb.c @@ -6771,8 +6771,8 @@ set1: if (op == MDB_GET_BOTH || rc > 0) return MDB_NOTFOUND; rc = 0; - *data = olddata; } + *data = olddata; } else { if (mc->mc_xcursor) @@ -10501,8 +10501,11 @@ mdb_drop0(MDB_cursor *mc, int subs) /* DUPSORT sub-DBs have no ovpages/DBs. Omit scanning leaves. * This also avoids any P_LEAF2 pages, which have no nodes. + * Also if the DB doesn't have sub-DBs and has no overflow + * pages, omit scanning leaves. */ - if (mc->mc_flags & C_SUB) + if ((mc->mc_flags & C_SUB) || + (!subs && !mc->mc_db->md_overflow_pages)) mdb_cursor_pop(mc); mdb_cursor_copy(mc, &mx); @@ -10529,6 +10532,9 @@ mdb_drop0(MDB_cursor *mc, int subs) pg, omp->mp_pages); if (rc) goto done; + mc->mc_db->md_overflow_pages -= omp->mp_pages; + if (!mc->mc_db->md_overflow_pages && !subs) + break; } else if (subs && (ni->mn_flags & F_SUBDATA)) { mdb_xcursor_init1(mc, ni); rc = mdb_drop0(&mc->mc_xcursor->mx_cursor, 0); @@ -10536,6 +10542,8 @@ mdb_drop0(MDB_cursor *mc, int subs) goto done; } } + if (!subs && !mc->mc_db->md_overflow_pages) + goto pop; } else { if ((rc = mdb_midl_need(&txn->mt_free_pgs, n)) != 0) goto done; @@ -10557,6 +10565,7 @@ mdb_drop0(MDB_cursor *mc, int subs) /* no more siblings, go back to beginning * of previous level. */ +pop: mdb_cursor_pop(mc); mc->mc_ki[0] = 0; for (i=1; i<mc->mc_snum; i++) { |
