2843d2cfc55054140b354bc75ad25f1eacbfda30 braney Wed Jan 15 23:19:30 2020 -0800 Revert "hgCollection fiddles with the settingsHash of trackDb, which might be" This reverts commit 3e29ad0059ebf3c9b781ac5317e692ae2a2687bb. diff --git src/hg/lib/trackDbCache.c src/hg/lib/trackDbCache.c index ca2d949..d2e9a0b 100644 --- src/hg/lib/trackDbCache.c +++ src/hg/lib/trackDbCache.c @@ -37,30 +37,65 @@ if (superHash == NULL) errAbort("parsing supertrack without superHash"); struct trackDb *super = (struct trackDb *)hashFindVal(superHash, tdb->parent->track); if (super == NULL) { super = lmCloneTdb(lm, tdb->parent, NULL, NULL); hashAdd(superHash, super->track, super); } lmRefAdd(lm, &super->children, tdb); return super; } +struct hashEl *lmCloneHashElList(struct lm *lm, struct hashEl *list) +/* Clone a list of hashEl's. */ +{ +struct hashEl *newList = NULL; + +for(; list; list = list->next) + { + struct hashEl *hel = lmAlloc(lm, sizeof(struct hashEl)); + slAddHead(&newList, hel); + hel->name = lmCloneString(lm, list->name); + hel->val = lmCloneString(lm, (char *)list->val); // we're assuming that the values are strings + hel->hashVal = list->hashVal; + } + +return newList; +} + +struct hash *lmCloneHash(struct lm *lm, struct hash *hash) +/* Clone a hash into local memory. */ +{ +struct hash *newHash = lmAlloc(lm, sizeof(struct hash)); + +*newHash = *hash; +newHash->lm = NULL; +newHash->ownLm = FALSE; +newHash->next = NULL; +lmAllocArray(lm, newHash->table, hash->size); + +int ii; +for(ii=0; ii < hash->size; ii++) + if (hash->table[ii] != NULL) + newHash->table[ii] = lmCloneHashElList(lm, hash->table[ii]); + +return newHash; +} struct trackDb *lmCloneTdb(struct lm *lm, struct trackDb *tdb, struct trackDb *parent, struct hash *superHash) /* clone a single tdb structure. Will clone its children if it has any */ { struct trackDb *newTdb = lmAlloc(lm, sizeof(struct trackDb)); *newTdb = *tdb; if (tdb->subtracks) newTdb->subtracks = lmCloneTdbList(lm, tdb->subtracks, newTdb, NULL); if ((tdb->parent != NULL) && (superHash != NULL)) { newTdb->parent = lmCloneSuper(lm, newTdb, superHash); }