From 7233bc295bb3e40b2758158ae2de6f42516962f8 Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Tue, 14 May 2013 16:57:50 -0700 Subject: [PATCH] Fix mdb_page_split - nested split If updating a page's separator triggers a split in its parent, we may have missed adjusting the parent's cursor position. --- libraries/liblmdb/mdb.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c index dfa8796..c09cb0d 100644 --- a/libraries/liblmdb/mdb.c +++ b/libraries/liblmdb/mdb.c @@ -6933,6 +6933,17 @@ newsep: } } else { mc->mc_ki[ptop]++; + /* Make sure mc_ki is still valid. + */ + if (mn.mc_pg[ptop] != mc->mc_pg[ptop] && + mc->mc_ki[ptop] >= NUMKEYS(mc->mc_pg[ptop])) { + for (i=0; imc_pg[i] = mn.mc_pg[i]; + mc->mc_ki[i] = mn.mc_ki[i]; + } + mc->mc_pg[ptop] = mn.mc_pg[ptop]; + mc->mc_ki[ptop] = mn.mc_ki[ptop] - 1; + } } /* return tmp page to freelist */