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. */