]> git.sur5r.net Git - openldap/commitdiff
ITS#7213 fix page_split with MDB_APPEND
authorHoward Chu <hyc@symas.com>
Mon, 26 Mar 2012 13:58:16 +0000 (06:58 -0700)
committerHoward Chu <hyc@symas.com>
Mon, 26 Mar 2012 13:58:16 +0000 (06:58 -0700)
don't skip the cursor adjust checks

libraries/libmdb/mdb.c

index 25080f3f2174c9a7c4c0bcc09a4f725f98777ca6..e69dcf5522b0e56ee770d16b3e75990b964ab9f2 100644 (file)
@@ -5665,7 +5665,10 @@ newsep:
        if (nflags & MDB_APPEND) {
                mc->mc_pg[mc->mc_top] = rp;
                mc->mc_ki[mc->mc_top] = 0;
-               return mdb_node_add(mc, 0, newkey, newdata, newpgno, nflags);
+               rc = mdb_node_add(mc, 0, newkey, newdata, newpgno, nflags);
+               if (rc)
+                       return rc;
+               goto done;
        }
        if (IS_LEAF2(rp)) {
                goto done;
@@ -5772,10 +5775,11 @@ done:
                        if (!(m3->mc_flags & C_INITIALIZED))
                                continue;
                        if (new_root) {
+                               int k;
                                /* root split */
-                               for (i=m3->mc_top; i>0; i--) {
-                                       m3->mc_ki[i+1] = m3->mc_ki[i];
-                                       m3->mc_pg[i+1] = m3->mc_pg[i];
+                               for (k=m3->mc_top; k>=0; k--) {
+                                       m3->mc_ki[k+1] = m3->mc_ki[k];
+                                       m3->mc_pg[k+1] = m3->mc_pg[k];
                                }
                                m3->mc_ki[0] = mc->mc_ki[0];
                                m3->mc_pg[0] = mc->mc_pg[0];