New cache subsystem
[tedtools.git] / tbtree.c
index becd120..f9eae19 100644 (file)
--- 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;i<page->npointer+1;i++) {
+       for(i=0;i<page->npointer+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);