00c4273c6e28f9f6df2f42056d3e39e7eb88e5a6 kent Wed May 7 14:13:50 2014 -0700 Adding NULL check to genomeRangeTreeFree. diff --git src/lib/genomeRangeTree.c src/lib/genomeRangeTree.c index 81e8752..d6e2e7d 100644 --- src/lib/genomeRangeTree.c +++ src/lib/genomeRangeTree.c @@ -27,40 +27,44 @@ 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. */ { +struct genomeRangeTree *grt = *pTree; +if (grt != NULL) + { /* need to manually free object due to thee way rbTreeNewDetailed is done */ -struct hashCookie hc = hashFirst((*pTree)->hash); + struct hashCookie hc = hashFirst(grt->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) */ + lmCleanup(&(grt->lm)); /* clean up all the memory for all nodes for all trees */ + freeHash(&(grt->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. */ { 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. */ { struct hashEl *hel; hel = hashStore(tree->hash, chrom); if (hel->val == NULL) /* need to add a new rangeTree */ hel->val = rangeTreeNewDetailed(tree->lm, tree->stack); return hel->val;