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