+ // since our page will have no more pointers to it,
+ // obtain Delete lock and wait for write locks to clear
+
+ 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