+ bt_lockpage(BtLockDelete, set);
+ bt_lockpage(BtLockWrite, set);
+
+ // if we aren't dead yet,
+ // get ready for exit
+
+ if( page->act ) {
+ bt_unlockpage(BtLockDelete, set);
+ bt_unlockpage(BtLockWrite, lset);
+ bt_unpinlatch (lset);
+ bt_unpinpool (lpool);
+ goto lmergexit;
+ }
+
+ // are we are the fence key for our parent?
+ // if so, grab our old fence key
+
+ if( postfence = slot == ppage->cnt ) {
+ ptr = keyptr (ppage, ppage->cnt);
+ memcpy(fencekey, ptr, ptr->len + 1);
+ memset(slotptr(ppage, ppage->cnt), 0, sizeof(BtSlot));
+
+ // clear out other dead slots
+
+ while( --ppage->cnt )
+ if( slotptr(ppage, ppage->cnt)->dead )
+ memset(slotptr(ppage, ppage->cnt), 0, sizeof(BtSlot));
+ else
+ break;
+
+ ptr = keyptr (ppage, ppage->cnt);
+ memcpy(postkey, ptr, ptr->len + 1);
+ } else
+ slotptr(ppage,slot)->dead = 1;
+
+ ppage->dirty = 1;
+ ppage->act--;
+
+ // push our right neighbor pointer to our left
+
+ memcpy (lpage->right, page->right, BtId);
+
+ // add ourselves to free chain
+ // lock latch mgr
+
+ bt_spinwritelock(bt->mgr->latchmgr->lock);
+
+ // store free chain in allocation page second right
+ bt_putid(page->right, bt_getid(bt->mgr->latchmgr->alloc[1].right));
+ bt_putid(bt->mgr->latchmgr->alloc[1].right, page_no);
+
+ // unlock latch mgr and pages
+
+ bt_spinreleasewrite(bt->mgr->latchmgr->lock);
+ bt_unlockpage(BtLockWrite, lset);
+ bt_unpinlatch (lset);
+ bt_unpinpool (lpool);
+
+ // release our node's delete lock
+
+ bt_unlockpage(BtLockDelete, set);