4c4bf5f31b6f0aa1549778dc06caad4d84ed4966 jcasper Tue Feb 20 18:02:40 2018 -0800 hgHubConnect now assembles search results a bit faster (turns out there can be enough hits per hub that head vs tail insertion makes a difference). refs #18865 diff --git src/hg/hgHubConnect/hgHubConnect.c src/hg/hgHubConnect/hgHubConnect.c index 81455f0..996e864 100644 --- src/hg/hgHubConnect/hgHubConnect.c +++ src/hg/hgHubConnect/hgHubConnect.c @@ -1138,33 +1138,37 @@ struct hubSearchText *hubSearchResults = getHubSearchResults(conn, hubSearchTableName, hubSearchTerms, checkDescriptions, lcDbFilter, hubLookup); searchResultHash = newHash(5); struct hubSearchText *hst = hubSearchResults; while (hst != NULL) { struct hubSearchText *nextHst = hst->next; hst->next = NULL; struct hashEl *hubHashEnt = hashLookup(searchResultHash, hst->hubUrl); if (hubHashEnt == NULL) { slNameAddHead(&hubsToPrint, hst->hubUrl); hashAdd(searchResultHash, hst->hubUrl, hst); } else - slAddTail(&(hubHashEnt->val), hst); + slAddHead(&(hubHashEnt->val), hst); hst = nextHst; } + struct hashEl *hel; + struct hashCookie cookie = hashFirst(searchResultHash); + while ((hel = hashNext(&cookie)) != NULL) + slReverse(&(hel->val)); } else { // There is no active search, so just add all hubs to the list struct hashEl *hel; struct hashEl *helList; helList = hashElListHash(hubLookup); for (hel = helList; hel != NULL; hel = hel->next) { if (isNotEmpty(lcDbFilter)) { struct hubEntry *hubEnt = (struct hubEntry *) hel->val; char *lcDbList = cloneString(hubEnt->dbList); if (isNotEmpty(lcDbList)) tolowers(lcDbList);