7f396ae51fb175f8a7785556f329d3391596b4b0
braney
  Mon Feb 23 16:07:03 2015 -0800
fix duplicated lines in group menu bug #14878

diff --git src/hg/lib/cartTrackDb.c src/hg/lib/cartTrackDb.c
index b8cbf71..eb18344 100644
--- src/hg/lib/cartTrackDb.c
+++ src/hg/lib/cartTrackDb.c
@@ -96,38 +96,39 @@
 
 /* if we have custom tracks, we want to add the track hubs
  * after that group */
 struct grp *addAfter = NULL;
 if ((groupList != NULL) && sameString(groupList->name, "user"))
     addAfter = groupList;
 
 /* Add in groups from hubs. */
 for (group = slPopHead(pHubGrpList); group != NULL; group = slPopHead(pHubGrpList))
     {
     // if the group isn't represented in any track, don't add it to list
     if (!hashLookup(groupsInTrackList,group->name))
 	continue;
     /* check to see if we're inserting hubs rather than
      * adding them to the front of the list */
+    struct grp *newGrp = grpDup(group);
     if (addAfter != NULL)
 	{
-	group->next = addAfter->next;
-	addAfter->next = group;
+	newGrp->next = addAfter->next;
+	addAfter->next = newGrp;
 	}
     else
-	slAddHead(&groupList, group);
-    hashAdd(groupsInDatabase, group->name, group);
+	slAddHead(&groupList, newGrp);
+    hashAdd(groupsInDatabase, newGrp->name, newGrp);
     }
 
 /* Do some error checking for tracks with group names that are
  * not in database.  Just warn about them. */
 if (!trackHubDatabase(db))
     for (track = trackList; track != NULL; track = track->next)
     {
     if (!hashLookup(groupsInDatabase, track->grp))
          warn("Track %s has group %s, which isn't in grp table",
 	 	track->table, track->grp);
     }
 
 /* Create dummy group for all tracks. */
 AllocVar(group);
 group->name = cloneString("allTracks");