X-Git-Url: http://sigaev.ru/git/gitweb.cgi?a=blobdiff_plain;f=tbtree.c;fp=tbtree.c;h=f9eae196bbbbbadf9db1324c41c18bf044c7329b;hb=beb40fddfb7d6bd4d31f5d7a8ac5f362ed0878d6;hp=becd120a95309d9e4e50febafe60f4da2a2397b8;hpb=1a9bd04fad98b23f594258f28b6d8604dc45662b;p=tedtools.git diff --git a/tbtree.c b/tbtree.c index becd120..f9eae19 100644 --- a/tbtree.c +++ b/tbtree.c @@ -673,21 +673,21 @@ findDelimiter(TBTree *db, TBTPage *page, TBTPointer *ptr, int size, u_int32_t st } - if ( was==0 ) + if ( was==0 ) { sizes[page->npointer]=size; + } - for(i=0;inpointer+1;i++) { + for(i=0;inpointer+1;i++) if ( i< start ) lfree-=sizes[i]; else rfree-=sizes[i]; - } while( 1 ) { if ( lfree<0 ) { + start--; lfree+=sizes[start]; rfree-=sizes[start]; - start--; } else if ( rfree < 0 ) { lfree-=sizes[start]; rfree+=sizes[start]; @@ -778,7 +778,6 @@ splitPage(TBTree *db, TBTMemPage *srcpage, TBTMemPage** newpage, TBTPointer **pt packLeafKV(db, &(tmp->page), *ptr, key, value); else packInternalKV(db, &(tmp->page), *ptr, key, pagenumber); - return TBT_OK; } @@ -825,7 +824,9 @@ layerInsert(TBTree *db, u_int32_t pagenumber, TBTMemPage **left, TBTMemPage **ri } if ( size <= page->page.freespace ) { + u_int32_t oldsize=page->page.freespace; packLeafKV(db, &(page->page), ptr, key, value); + tassert( oldsize == page->page.freespace + size ); page->issynced=0; } else { rc = splitPage(db, page, &newright, &ptr, size, key, value, 0);