3ef1589ee01ec67a7cfd1ddfb050f606c3a03ccb
braney
  Thu Jun 27 11:23:38 2019 -0700
make sure bigBed gets closed even if it's asked for an index it doesn't
have

diff --git src/hg/lib/bigBedFind.c src/hg/lib/bigBedFind.c
index 23b8603..f991e81 100644
--- src/hg/lib/bigBedFind.c
+++ src/hg/lib/bigBedFind.c
@@ -34,47 +34,51 @@
     hgPos->chromStart = interval->start;
     hgPos->chromEnd = interval->end;
     hgPos->name = bigBedMakeLabel(tdb, labelColumns, interval, chromName);
     hgPos->browserName = cloneString(term);
     hgPos->description = cloneString(description);
     }
 
 return posList;
 }
 
 static struct hgPos *getPosFromBigBed(struct cart * cart, struct trackDb *tdb, char *bigDataUrl, char *indexField, char *term, char *description)
 /* Given a bigBed file with a search index, check for term. */
 {
 struct errCatch *errCatch = errCatchNew();
 struct hgPos *posList = NULL;
+struct bbiFile *bbi = NULL;
 if (errCatchStart(errCatch))
     {
-    struct bbiFile *bbi = bigBedFileOpen(bigDataUrl);
+    bbi = bigBedFileOpen(bigDataUrl);
     int fieldIx;
     struct bptFile *bpt = bigBedOpenExtraIndex(bbi, indexField, &fieldIx);
     struct lm *lm = lmInit(0);
     struct bigBedInterval *intervalList;
     intervalList = bigBedNameQuery(bbi, bpt, fieldIx, term, lm);
 
     posList = bigBedIntervalListToHgPositions(cart, tdb,  bbi, term, 
         intervalList, description);
     bbiFileClose(&bbi);
     }
 errCatchEnd(errCatch);
 if (errCatch->gotError) 
+    {
+    bbiFileClose(&bbi);
     // we fail silently if bigBed is missing
     return NULL;
+    }
 
 return posList;
 }
 
 static struct hgPos *doTrixSearch(struct cart *cart, struct trackDb *tdb, char *trixFile, struct slName  *indices, char *bigDataUrl, char *term, char *description)
 /* search a trix file in the "searchTrix" field of a bigBed trackDb */
 {
 struct trix *trix = trixOpen(trixFile);
 int trixWordCount = 0;
 char *tmp = cloneString(term);
 char *val = nextWord(&tmp);
 char *trixWords[128];
 
 while (val != NULL)
     {