X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=threadskv5.c;h=42293dcc80c0d5d0d59b9df6f7be0ccd194579d8;hb=918a8d245cf434bac363202ec5b122407f841631;hp=b88554afc70bdc76bbef30466d527078c9162c50;hpb=c9a25f99dedc9de571b6607881a15cdf853a8ed0;p=btree diff --git a/threadskv5.c b/threadskv5.c index b88554a..42293dc 100644 --- a/threadskv5.c +++ b/threadskv5.c @@ -1709,6 +1709,7 @@ BtPageSet right2[1]; bt_putid(right2->page->left, left_page_no); bt_unlockpage (BtLockWrite, right2->latch); bt_unpinlatch (right2->latch); + bt_unpinpool (right2->pool); return 0; } @@ -1718,8 +1719,8 @@ BtPageSet right2[1]; BTERR bt_deletekey (BtDb *bt, unsigned char *key, uint len, uint lvl) { unsigned char lowerfence[BT_keyarray], higherfence[BT_keyarray]; -BtPageSet set[1], right[1], right2[1]; uint slot, idx, found, fence; +BtPageSet set[1], right[1]; unsigned char value[BtId]; BtKey *ptr, *tst; BtVal *val; @@ -2007,8 +2008,7 @@ BtVal *val; val = valptr(bt->frame, cnt); nxt -= val->len + sizeof(BtVal); - ((unsigned char *)page)[nxt] = val->len; - memcpy ((unsigned char *)page + nxt + sizeof(BtVal), val->value, val->len); + memcpy ((unsigned char *)page + nxt, val, val->len + sizeof(BtVal)); // copy the key across @@ -2142,14 +2142,11 @@ uint prev; continue; src = valptr(set->page, cnt); nxt -= src->len + sizeof(BtVal); - val = (BtVal*)((unsigned char *)bt->frame + nxt); - memcpy (val->value, src->value, src->len); - val->len = src->len; + memcpy ((unsigned char *)bt->frame + nxt, src, src->len + sizeof(BtVal)); key = keyptr(set->page, cnt); nxt -= key->len + sizeof(BtKey); - ptr = (BtKey*)((unsigned char *)bt->frame + nxt); - memcpy (ptr, key, key->len + sizeof(BtKey)); + memcpy ((unsigned char *)bt->frame + nxt, key, key->len + sizeof(BtVal)); // add librarian slot @@ -2217,10 +2214,9 @@ uint prev; while( cnt++ < max ) { if( slotptr(bt->frame, cnt)->dead ) continue; - val = valptr(bt->frame, cnt); - nxt -= val->len + sizeof(BtVal); - ((unsigned char *)set->page)[nxt] = val->len; - memcpy ((unsigned char *)set->page + nxt + sizeof(BtVal), val->value, val->len); + src = valptr(bt->frame, cnt); + nxt -= src->len + sizeof(BtVal); + memcpy ((unsigned char *)set->page + nxt, src, src->len + sizeof(BtVal)); key = keyptr(bt->frame, cnt); nxt -= key->len + sizeof(BtKey);