6e23c057401f7a45a1c69033b815f9cca9ddb3b3
braney
  Thu Feb 21 14:00:23 2013 -0800
free list of chrom names from twoBit library, change trackHubGetHubLabels to trackHubGetCladeLables  (from code review #10237)
diff --git src/hg/lib/trackHub.c src/hg/lib/trackHub.c
index 7bd3fc1..39905f2 100644
--- src/hg/lib/trackHub.c
+++ src/hg/lib/trackHub.c
@@ -125,31 +125,31 @@
 
 return db;
 }
 
 struct dbDb *trackHubDbDbFromAssemblyDb(char *database)
 /* Return a dbDb structure for just this database. */
 {
 struct hashEl *hel = hashLookup(hubAssemblyHash, database);
 if (hel == NULL)
     return NULL;
 
 struct trackHubGenome *genome = hel->val;
 return makeDbDbFromAssemblyGenome(genome);
 }
 
-struct slPair *trackHubGetHubLabels()
+struct slPair *trackHubGetCladeLabels()
 /* Get a list of labels describing the loaded assembly data hubs. */
 {
 if (globalAssemblyHubList == NULL)
     return NULL;
 
 struct slPair *clade, *cladeList = NULL;
 
 struct trackHub *trackHub = globalAssemblyHubList;
 
 for(;trackHub; trackHub = trackHub->next)
     {
     AllocVar(clade);
     slAddHead(&cladeList, clade);
 
     clade->name = cloneString(trackHub->name);
@@ -185,57 +185,63 @@
     }
 
 return dbList;
 }
 
 int trackHubChromCount(char *database)
 /* Return number of chromosomes in a assembly data hub. */
 {
 struct hashEl *hel = hashLookup(hubAssemblyHash, database);
 if (hel == NULL)
     return 0;
 
 struct trackHubGenome *genome = hel->val;
 struct slName *chromList = twoBitSeqNamesExt(genome->twoBitPath, TRUE);
 
-return slCount(chromList);
+int num = slCount(chromList);
+slListFree(&chromList);
+return  num;
 }
 
 struct slName *trackHubAllChromNames(char *database)
 /* Return a list of all the chrom names in this assembly hub database. */
+/* Free with slListFree. */
 {
 struct hashEl *hel = hashLookup(hubAssemblyHash, database);
 if (hel == NULL)
     return 0;
 
 struct trackHubGenome *genome = hel->val;
 struct slName *chromList = twoBitSeqNamesExt(genome->twoBitPath, TRUE);
 
 return chromList;
 }
 
 char *trackHubDefaultChrom(char *database)
 /* Return the default chromosome for this track hub assembly. */
 {
 struct hashEl *hel = hashLookup(hubAssemblyHash, database);
 if (hel == NULL)
     return NULL;
 
 struct trackHubGenome *genome = hel->val;
 struct slName *chromList = twoBitSeqNamesExt(genome->twoBitPath, TRUE);
 
-return chromList->name;
+char *defaultName = cloneString( chromList->name);
+slListFree(&chromList);
+
+return defaultName;
 }
 
 struct chromInfo *trackHubChromInfo(char *database, char *chrom)
 /* Return a chromInfo structure for just this chrom in this database. */
 {
 if (hubAssemblyHash == NULL)
     return NULL;
 
 struct hashEl *hel = hashLookup(hubAssemblyHash, database);
 
 if (hel == NULL)
     return NULL;
 
 struct trackHubGenome *genome = hel->val;
 struct chromInfo *ci;
@@ -256,30 +262,31 @@
 if (hel == NULL)
     return NULL;
 
 struct trackHubGenome *genome = hel->val;
 struct chromInfo *ci, *ciList = NULL;
 struct slName *chromList = twoBitSeqNamesExt(genome->twoBitPath, TRUE);
 
 for(; chromList; chromList = chromList->next)
     {
     AllocVar(ci);
     ci->chrom = cloneString(chromList->name);
     ci->fileName = genome->twoBitPath;
     ci->size = twoBitSeqSize(genome->tbf, chromList->name);
     slAddHead(&ciList, ci);
     }
+slListFree(&chromList);
 return ciList;
 }
 
 static char *getRequiredGrpSetting(struct hash *hash, char *name, struct lineFile *lf)
 /* Grab a group setting out of the group hash.  errAbort if not found. */
 {
 char *str;
 if ((str = hashFindVal(hash, name)) == NULL) 
     errAbort("missing required setting '%s' for group on line %d in file %s\n",
 	name, lf->lineIx, lf->fileName);
 return str;
 }
 
 static struct grp *readGroupRa(char *groupFileName)
 /* Read in the ra file that describes the groups in an assembly hub. */