5ed1001df4467a7644b485f82f1b3be3e59180c5
kent
  Wed Feb 27 22:06:31 2013 -0800
Fixing bug in rFindMulti that was making bigBed name index crash on uc021tvv.1 in ucscGenes.bb
diff --git src/lib/bPlusTree.c src/lib/bPlusTree.c
index fcffba8..c017b2d 100644
--- src/lib/bPlusTree.c
+++ src/lib/bPlusTree.c
@@ -197,31 +197,35 @@
 else
     {
     /* Read first key and first file offset. */
     udcMustRead(bpt->udc, keyBuf, keySize);
     bits64 lastFileOffset = udcReadBits64(bpt->udc, isSwapped);
     bits64 fileOffset = lastFileOffset;
     int lastCmp = memcmp(key, keyBuf, keySize);
 
     /* Loop through remainder. */
     for (i=1; i<childCount; ++i)
 	{
 	udcMustRead(bpt->udc, keyBuf, keySize);
 	fileOffset = udcReadBits64(bpt->udc, isSwapped);
 	int cmp = memcmp(key, keyBuf, keySize);
 	if (lastCmp >= 0 && cmp <= 0)
+	    {
+	    bits64 curPos = udcTell(bpt->udc);
 	    rFindMulti(bpt, lastFileOffset, key, pList);
+	    udcSeek(bpt->udc, curPos);
+	    }
 	if (cmp < 0)
 	    return;
 	lastCmp = cmp;
 	lastFileOffset = fileOffset;
 	}
     /* If made it all the way to end, do last one too. */
     rFindMulti(bpt, fileOffset, key, pList);
     }
 }
 
 
 static void rTraverse(struct bptFile *bpt, bits64 blockStart, void *context, 
     void (*callback)(void *context, void *key, int keySize, void *val, int valSize) )
 /* Recursively go across tree, calling callback at leaves. */
 {