9181e0bc70e1a76053fa9df68936d3aebda03e6a
markd
  Thu Dec 2 17:59:30 2010 -0800
fixed memory leak
diff --git src/lib/genomeRangeTree.c src/lib/genomeRangeTree.c
index b1a67b8..5de64e2 100644
--- src/lib/genomeRangeTree.c
+++ src/lib/genomeRangeTree.c
@@ -28,30 +28,36 @@
 t->hash = newHash(hashPowerOfTwoSize);
 t->lm = lmInit(0);
 return t;
 }
 
 struct genomeRangeTree *genomeRangeTreeNew()
 /* Create a new, empty, genomeRangeTree. Uses the default hash size.
  * Free with genomeRangeTreeFree. */
 {
 return genomeRangeTreeNewSize(0);
 }
 
 void genomeRangeTreeFree(struct genomeRangeTree **pTree)
 /* Free up genomeRangeTree.  */
 {
+/* need to manually free object due to thee way rbTreeNewDetailed is done */
+struct hashCookie hc = hashFirst((*pTree)->hash);
+struct hashEl *hel;
+while ((hel = hashNext(&hc)) != NULL)
+    freeMem(hel->val);
+
 lmCleanup(&((*pTree)->lm));  /* clean up all the memory for all nodes for all trees */
 freeHash(&((*pTree)->hash)); /* free the hash table including names (trees are freed by lmCleanup) */
 freez(pTree);                /* free this */
 }
 
 struct rbTree *genomeRangeTreeFindRangeTree(struct genomeRangeTree *tree, char *chrom)
 /* Find the rangeTree for this chromosome, if any. Returns NULL if chrom not found.
  * Free with genomeRangeTreeFree. */
 {
 return hashFindVal(tree->hash, chrom);
 }
 
 struct rbTree *genomeRangeTreeFindOrAddRangeTree(struct genomeRangeTree *tree, char *chrom)
 /* Find the rangeTree for this chromosome, or add new chrom and empty rangeTree if not found.
  * Free with genomeRangeTreeFree. */