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) {