77421e0dc5eb5327b15ce1d12509d549068dfc73
angie
  Thu Feb 20 10:48:31 2020 -0800
featureBits .chain support: ignore chains on chroms other than the current chrom, and lineFileClose when done. tangentially refs #21650

diff --git src/hg/featureBits/featureBits.c src/hg/featureBits/featureBits.c
index e4ff10d..c05d8e7 100644
--- src/hg/featureBits/featureBits.c
+++ src/hg/featureBits/featureBits.c
@@ -385,39 +385,43 @@
 
 void fbOrChain(Bits *acc, char *track, char *chrom, int chromSize)
 /* Or in a chain file. */
 {
 struct lineFile *lf;
 char fileName[512];
 struct chain *chain;
 struct cBlock *b;
 
 chromFileName(track, chrom, fileName);
 if (!fileExists(fileName))
     return;
 lf = lineFileOpen(fileName, TRUE);
 while ((chain = chainRead(lf)) != NULL)
     {
+    if (sameString(chrom, chain->tName))
+        {
         for (b = chain->blockList; b != NULL; b = b->next)
             {
             int s = b->tStart, e = b->tEnd;
             if (s < 0) outOfRange(lf, chrom, chromSize);
             if (e > chromSize) outOfRange(lf, chrom, chromSize);
             bitSetRange(acc, b->tStart, b->tEnd - b->tStart);
             }
+        }
     chainFree(&chain);
     }
+lineFileClose(&lf);
 }
 
 
 void isolateTrackPartOfSpec(char *spec, char track[512])
 /* Convert something like track:exon to just track */
 {
 char *s;
 strncpy(track, spec, 512);
 s = strchr(track, ':');
 if (s != NULL) *s = 0;
 }
 
 void orFile(Bits *acc, char *track, char *chrom, int chromSize)
 /* Or some sort of file into bits. */
 {