d0942d5563ca2fdd0170c4730bb6bf1ecc8258ea
braney
Thu Aug 27 09:16:16 2026 -0700
quickLift: take out the unused visibility string, refs #38032
trackHubBuild and walkTree never wrote visDy. hgConvert allocated it, passed it
down, then reassigned it inside the chain loop, leaking a dyString per chain.
diff --git src/hg/hgConvert/hgConvert.c src/hg/hgConvert/hgConvert.c
index a5dc8d44f05..e4bbc50ba49 100644
--- src/hg/hgConvert/hgConvert.c
+++ src/hg/hgConvert/hgConvert.c
@@ -650,54 +650,52 @@
errAbort("Early error - unable to find matching database records in dbDb - please contact support");
chromAliasSetup(database);
cartWebStart(cart, database, "%s %s %s to %s %s", fromDb->organism, fromDb->description,
fromPos, toDb->organism, toDb->description);
char *fileName = liftOverChainFile(trackHubSkipHubName(fromDb->name), trackHubSkipHubName(toDb->name));
if (isEmpty(fileName))
errAbort("Unable to find a chain file from %s to %s - please contact support", fromDb->name, toDb->name);
fileName = hReplaceGbdbMustDownload(fileName);
char *chrom;
int start, end;
int origSize;
struct chain *chainList, *chain;
-struct dyString *visDy = NULL;
if (!hgParseChromRange(database, fromPos, &chrom, &start, &end))
errAbort("position %s is not in chrom:start-end format", fromPos);
origSize = end - start;
boolean doQuickLift = cartUsualBoolean(cart, "doQuickLift", FALSE);
cartRemove(cart, "doQuickLift");
boolean hideOtherTracks = cartUsualBoolean(cart, "hideTracksOnConvert", TRUE);
cartRemove(cart, "hideTracksOnConvert");
unsigned quickChain = 0;
unsigned quickHub = 0;
struct trackDb *badList = NULL;
if (doQuickLift)
{
quickChain = quickLiftGetChainId(cart, trackHubSkipHubName(fromDb->name), trackHubSkipHubName(toDb->name));
if (quickChain == 0)
errAbort("can't find quickChain from %s to %s", fromDb->name, toDb->name);
- visDy = newDyString(1024);
- char *newHub = trackHubBuild(fromDb->name, cart, visDy, &badList);
+ char *newHub = trackHubBuild(fromDb->name, cart, &badList);
char *error = NULL;
quickHub = hubFindOrAddUrlInStatusTable(cart, newHub, &error);
if (error != NULL)
errAbort("can't add quickLift hub (error %s)",error);
}
chainList = chainLoadAndTrimIntersecting(fileName, chrom, start, end);
if (chainList == NULL)
printf("Sorry this position couldn't be found in new assembly");
else
{
for (chain = chainList; chain != NULL; chain = chain->next)
{
int blockSize;
int qStart, qEnd;
@@ -711,31 +709,30 @@
qStart = chain->qStart;
qEnd = chain->qEnd;
}
blockSize = chainTotalBlockSize(chain);
/* Check if the toDb database exists and if the chromosome
sequence file (of the hgConvert result) exists in the location
specified in chromInfo for the toDb. */
boolean chromSeqExists = (sqlDatabaseExists(toDb->name) &&
chromSeqFileExists(toDb->name, chain->qName));
/* Check if the toDb has active set to 1 in dbDb if the toDb
database exists.
If these conditions are met then print position link to
browser for toDb, otherwise just print position without link. */
boolean startedAnchor = FALSE;
- visDy = newDyString(20);
if ((hDbIsActive(toDb->name) && chromSeqExists) || startsWith("hub:",toDb->nibPath) || sameString(toDb->nibPath, "genark"))
{
if (quickChain)
printf("",
hgTracksName(), toDb->name, chain->qName, qStart+1, qEnd, quickHub, toDb->name, quickChain,
hideOtherTracks ? "&hideTracks=on" : "");
else
printf("",
hgTracksName(), toDb->name, chain->qName, qStart+1, qEnd);
startedAnchor = TRUE;
}
printf("%s:%d-%d", chain->qName, qStart+1, qEnd);
if (startedAnchor)
printf("");
printf(" (%3.1f%% of bases, %3.1f%% of span)
\n",