]> git.sur5r.net Git - openldap/blobdiff - libraries/liblmdb/mdb.c
ITS#8221 fix typos
[openldap] / libraries / liblmdb / mdb.c
index b5d59bcdb18f9d67e622a1e2278a84e6df575780..4a251f2e1cf7732dd38d00fbe75f42e87ed0659f 100644 (file)
@@ -3553,6 +3553,9 @@ mdb_env_init_meta(MDB_env *env, MDB_meta *meta)
        mdb_env_init_meta0(env, meta);
 
        p = calloc(2, psize);
+       if (!p)
+               return ENOMEM;
+
        p->mp_pgno = 0;
        p->mp_flags = P_META;
        *(MDB_meta *)METADATA(p) = *meta;
@@ -7682,17 +7685,23 @@ mdb_rebalance(MDB_cursor *mc)
 {
        MDB_node        *node;
        int rc;
-       unsigned int ptop, minkeys;
+       unsigned int ptop, minkeys, thresh;
        MDB_cursor      mn;
        indx_t oldki;
 
-       minkeys = 1 + (IS_BRANCH(mc->mc_pg[mc->mc_top]));
+       if (IS_BRANCH(mc->mc_pg[mc->mc_top])) {
+               minkeys = 2;
+               thresh = 1;
+       } else {
+               minkeys = 1;
+               thresh = FILL_THRESHOLD;
+       }
        DPRINTF(("rebalancing %s page %"Z"u (has %u keys, %.1f%% full)",
            IS_LEAF(mc->mc_pg[mc->mc_top]) ? "leaf" : "branch",
            mdb_dbg_pgno(mc->mc_pg[mc->mc_top]), NUMKEYS(mc->mc_pg[mc->mc_top]),
                (float)PAGEFILL(mc->mc_txn->mt_env, mc->mc_pg[mc->mc_top]) / 10));
 
-       if (PAGEFILL(mc->mc_txn->mt_env, mc->mc_pg[mc->mc_top]) >= FILL_THRESHOLD &&
+       if (PAGEFILL(mc->mc_txn->mt_env, mc->mc_pg[mc->mc_top]) >= thresh &&
                NUMKEYS(mc->mc_pg[mc->mc_top]) >= minkeys) {
                DPRINTF(("no need to rebalance page %"Z"u, above fill threshold",
                    mdb_dbg_pgno(mc->mc_pg[mc->mc_top])));
@@ -7826,8 +7835,7 @@ mdb_rebalance(MDB_cursor *mc)
         * move one key from it. Otherwise we should try to merge them.
         * (A branch page must never have less than 2 keys.)
         */
-       minkeys = 1 + (IS_BRANCH(mn.mc_pg[mn.mc_top]));
-       if (PAGEFILL(mc->mc_txn->mt_env, mn.mc_pg[mn.mc_top]) >= FILL_THRESHOLD && NUMKEYS(mn.mc_pg[mn.mc_top]) > minkeys) {
+       if (PAGEFILL(mc->mc_txn->mt_env, mn.mc_pg[mn.mc_top]) >= thresh && NUMKEYS(mn.mc_pg[mn.mc_top]) > minkeys) {
                rc = mdb_node_move(&mn, mc);
                if (mc->mc_ki[ptop]) {
                        oldki++;
@@ -8164,7 +8172,7 @@ mdb_page_split(MDB_cursor *mc, MDB_val *newkey, MDB_val *newdata, pgno_t newpgno
                                psize = 0;
                                if (newindx <= split_indx || newindx >= nkeys) {
                                        i = 0; j = 1;
-                                       k = newindx >= nkeys ? nkeys : split_indx+2;
+                                       k = newindx >= nkeys ? nkeys : split_indx+1+IS_LEAF(mp);
                                } else {
                                        i = nkeys; j = -1;
                                        k = split_indx-1;