a513cccc30dd0697dc78935f51a636e52a0793f0
hiram
  Mon Mar 23 16:36:04 2026 -0700
manage gcOnFly track regarding sessions refs #35958

diff --git src/hg/hgTracks/hgTracks.c src/hg/hgTracks/hgTracks.c
index bf26fd7d894..4af0cf51c31 100644
--- src/hg/hgTracks/hgTracks.c
+++ src/hg/hgTracks/hgTracks.c
@@ -7435,39 +7435,49 @@
 // load the track list and check to see if we need to rewrite the cart
 int cartVersionFromTrackDb = loadFromTrackDb(&trackList);
 int cartVersionFromCart = cartGetVersion(cart);
 if (cartVersionFromTrackDb > cartVersionFromCart)
     cartRewrite(cart, cartVersionFromTrackDb, cartVersionFromCart);
 
 if (measureTiming)
     measureTime("Time after trackDbLoad ");
 if (pcrResultParseCart(database, cart, NULL, NULL, NULL))
     slSafeAddHead(&trackList, pcrResultTg());
 if (userSeqString != NULL)
     slSafeAddHead(&trackList, userPslTg());
 slSafeAddHead(&trackList, oligoMatchTg());
 if (cfgOptionBooleanDefault("gcOnTheFly", FALSE))
     {
+    /* If a saved session is active but has no setting for the gcOnFly track,
+     * the session predates this track -- do not inject it. */
+    boolean sessionActive = isNotEmpty(cartOptionalString(cart, hgsOtherUserSessionName));
+    boolean gcOnFlyInSession = (cartOptionalString(cart, GC_ON_FLY_TRACK_NAME) != NULL);
+    boolean gcOnFlyAllowed = !sessionActive || gcOnFlyInSession;
+    if (gcOnFlyAllowed)
+	{
+	char *sessionVis = gcOnFlyInSession
+	    ? cartUsualString(cart, GC_ON_FLY_TRACK_NAME, "dense") : NULL;
 	if (cfgOptionBooleanDefault("gcOnTheFlyCoExist", FALSE))
 	    {
-	slSafeAddHead(&trackList, gc5BaseOnTheFlyTg(cart));
+	    slSafeAddHead(&trackList, gc5BaseOnTheFlyTg(cart, sessionVis));
 	    }
 	else
 	    {
 	    if (rFindTrackWithTable("gc5Base", trackList) == NULL &&
 		rFindTrackWithTable("gc5BaseBw", trackList) == NULL)
-	    slSafeAddHead(&trackList, gc5BaseOnTheFlyTg(cart));
+		slSafeAddHead(&trackList, gc5BaseOnTheFlyTg(cart, sessionVis));
+	    }
 	}
     }
 
 if (restrictionEnzymesOk())
     {
     slSafeAddHead(&trackList, cuttersTg());
     }
 if (wikiTrackEnabled(database, NULL))
     {
     addWikiTrack(&trackList);
     struct sqlConnection *conn = wikiConnect();
     if (sqlTableExists(conn, "variome"))
         addVariomeWikiTrack(&trackList);
     wikiDisconnect(&conn);
     }