24de1f0226a91322cb2c71ce8b86c85c230e70f1 braney Mon Feb 1 12:48:54 2016 -0800 close all the files that vcfTabix support opens diff --git src/lib/linefile.c src/lib/linefile.c index 08a0e38..408a843 100644 --- src/lib/linefile.c +++ src/lib/linefile.c @@ -238,30 +238,31 @@ return NULL; } tbx_t *tabix; if ((tabix = ti_index_load(tbiName)) == NULL) #else tabix_t *tabix = ti_open(fileOrUrl, tbiName); if (tabix == NULL) { warn("Unable to open \"%s\"", fileOrUrl); return NULL; } if ((tabix->idx = ti_index_load(tbiName)) == NULL) #endif { warn("Unable to load tabix index from \"%s\"", tbiName); + if (tabix) ti_close(tabix); tabix = NULL; return NULL; } struct lineFile *lf = needMem(sizeof(struct lineFile)); lf->fileName = cloneString(fileOrUrl); lf->fd = -1; lf->bufSize = 64 * 1024; lf->buf = needMem(lf->bufSize); lf->zTerm = zTerm; lf->tabix = tabix; #ifdef USE_HTS lf->htsFile = htsFile; kstring_t *kline; AllocVar(kline); @@ -736,30 +737,34 @@ if (pl != NULL) { pipelineClose(&lf->pl); } else if (lf->fd > 0 && lf->fd != fileno(stdin)) { close(lf->fd); freeMem(lf->buf); } #ifdef USE_TABIX else if (lf->tabix != NULL) { if (lf->tabixIter != NULL) ti_iter_destroy(lf->tabixIter); ti_close(lf->tabix); +#ifdef USE_HTS + hts_close(lf->htsFile); + free(lf->kline); +#endif } #endif // USE_TABIX else if (lf->udcFile != NULL) udcFileClose(&lf->udcFile); if (lf->closeCallBack) lf->closeCallBack(lf); freeMem(lf->fileName); metaDataFree(lf); freez(pLf); } } void lineFileCloseList(struct lineFile **pList) /* Close up a list of line files. */