+ if( right = bt_getid (prev->page->right) ) {
+ if( set->latch = bt_pinlatch (bt, right, 1) )
+ set->page = bt_mappage (bt, set->latch);
+ else
+ return -1;
+
+ bt_lockpage (bt, BtLockWrite, set->latch);
+ bt_putid (set->page->left, prev->latch->page_no);
+ set->latch->dirty = 1;
+ bt_unlockpage (bt, BtLockWrite, set->latch);
+ bt_unpinlatch (set->latch);
+ } else { // prev is rightmost page
+ bt_spinwritelock (bt->mgr->lock);
+ bt_putid (bt->mgr->pagezero->alloc->left, prev->latch->page_no);
+ bt_spinreleasewrite(bt->mgr->lock);
+ }
+
+ // Process last page split in chain
+
+ ptr = keyptr(prev->page,prev->page->cnt);
+ leaf = calloc (sizeof(AtomicKey), 1);
+
+ memcpy (leaf->leafkey, ptr, ptr->len + sizeof(BtKey));
+ leaf->page_no = prev->latch->page_no;
+ leaf->entry = prev->latch->entry;
+ leaf->type = 0;
+
+ if( tail )
+ tail->next = leaf;
+ else
+ head = leaf;
+
+ tail = leaf;
+
+ bt_lockpage(bt, BtLockParent, prev->latch);
+ bt_unlockpage(bt, BtLockWrite, prev->latch);
+
+ // remove atomic lock on master page
+
+ bt_unlockpage(bt, BtLockAtomic, latch);
+ continue;
+ }
+
+ // finished if prev page occupied (either master or final split)
+
+ if( prev->page->act ) {
+ bt_unlockpage(bt, BtLockWrite, latch);
+ bt_unlockpage(bt, BtLockAtomic, latch);
+ bt_unpinlatch(latch);
+ continue;