0689a6e26d5552dd64fdd4263985e1857236fd92 braney Wed Oct 31 12:21:17 2018 -0700 enable view caching on native tracks diff --git src/hg/lib/hui.c src/hg/lib/hui.c index b90bb71..d9bb321 100644 --- src/hg/lib/hui.c +++ src/hg/lib/hui.c @@ -2596,47 +2596,57 @@ return setting; } return NULL; } boolean subgroupingExists(struct trackDb *parentTdb, char *groupNameOrTag) // Does this parent track contain a particular subgrouping? { return (subgroupSettingByTagOrName(parentTdb,groupNameOrTag) != NULL); } static members_t *subgroupMembersGet(struct trackDb *parentTdb, char *groupNameOrTag) // Parse a subGroup setting line into tag,title, names(optional) and values(optional), // returning the count of members or 0 { +static members_t nullMember; // place holder for NULL members_t *members = tdbExtrasMembers(parentTdb, groupNameOrTag); if (members != NULL) + { + if (members == &nullMember) + return NULL; return members; + } + int ix,count; char *setting = subgroupSettingByTagOrName(parentTdb, groupNameOrTag); if (setting == NULL) + { + tdbExtrasMembersSet(parentTdb, groupNameOrTag, &nullMember); return NULL; + } members = needMem(sizeof(members_t)); members->setting = cloneString(setting); char *words[SMALLBUF]; count = chopLine(members->setting, words); assert(count <= ArraySize(words)); if (count <= 1) { freeMem(members->setting); freeMem(members); + tdbExtrasMembersSet(parentTdb, groupNameOrTag, &nullMember); return NULL; } members->groupTag = words[0]; members->groupTitle = strSwapChar(words[1],'_',' '); // Titles replace '_' with space members->tags = needMem(count*sizeof(char*)); members->titles = needMem(count*sizeof(char*)); for (ix = 2,members->count=0; ix < count; ix++) { char *name,*value; if (parseAssignment(words[ix], &name, &value)) { members->tags[members->count] = tagEncode(name); members->titles[members->count] = strSwapChar(value,'_',' '); members->count++; }