0f2b15b55316a468c710d89d7078ac6aa95a2bc8
angie
  Mon Jun 24 09:02:45 2013 -0700
Fixing problems with the way hgTables and hgVai handled failed position searches.fixes #10964, refs #6152

diff --git src/hg/hgTables/hgTables.c src/hg/hgTables/hgTables.c
index 2623b45..a67832e 100644
--- src/hg/hgTables/hgTables.c
+++ src/hg/hgTables/hgTables.c
@@ -1558,31 +1558,31 @@
 	    }
 	hPrintf("</A><BR>\n");
 	++count;
 	}
     lmCleanup(&lm);
     }
 if (count == 0)
     hPrintf(NO_RESULTS);
 htmlClose();
 }
 
 void doLookupPosition(struct sqlConnection *conn)
 /* Handle lookup button press.   The work has actually
  * already been done, so just call main page. */
 {
-doMainPage(conn);
+doMainPage(conn, FALSE);
 }
 
 /* Remove any meta data variables from the cart. (Copied from above!) */
 void removeMetaData()
 {
 cartRemove(cart, "hgta_metaStatus");
 cartRemove(cart, "hgta_metaVersion");
 cartRemove(cart, "hgta_metaDatabases");
 cartRemove(cart, "hgta_metaTables");
 }
 
 void doMetaData(struct sqlConnection *conn)
 /* Get meta data for a database. */
 {
 puts("Content-Type:text/plain\n");
@@ -1769,31 +1769,31 @@
 	    if (cartVarExists(cart, hgtaDoValueHistogram))
     		{
 		doValueHistogram(cartString(cart, hgtaDoValueHistogram));
 	    	}
 	    else
 	    	{
 	    	errAbort("Sorry, currently only the \"View Table Schema\" function of the Table Browser is available on this server.");
 	    	}
 	    }
 	}
 
     }
 else if (cartVarExists(cart, hgtaDoTest))
     doTest();
 else if (cartVarExists(cart, hgtaDoMainPage))
-    doMainPage(conn);
+    doMainPage(conn, FALSE);
 else if (cartVarExists(cart, hgtaDoSchema))
     doSchema(conn);
 else if (cartVarExists(cart, hgtaDoTopSubmit))
     doTopSubmit(conn);
 else if (cartVarExists(cart, hgtaDoSummaryStats))
     doSummaryStats(conn);
 else if (cartVarExists(cart, hgtaDoIntersectPage))
     doIntersectPage(conn);
 else if (cartVarExists(cart, hgtaDoPalOut))
     doGenePredPal(conn);
 else if (cartVarExists(cart, hgtaDoPal))
     doOutPalOptions( conn);
 else if (cartVarExists(cart, hgtaDoClearIntersect))
     doClearIntersect(conn);
 else if (cartVarExists(cart, hgtaDoIntersectMore))
@@ -1877,32 +1877,33 @@
 else if (cartVarExists(cart, hgtaDoSubtrackMergePage))
     doSubtrackMergePage(conn);
 else if (cartVarExists(cart, hgtaDoLookupPosition))
     doLookupPosition(conn);
 else if (cartVarExists(cart, hgtaDoSetUserRegions))
     doSetUserRegions(conn);
 else if (cartVarExists(cart, hgtaDoSubmitUserRegions))
     doSubmitUserRegions(conn);
 else if (cartVarExists(cart, hgtaDoClearSetUserRegionsText))
     doClearSetUserRegionsText(conn);
 else if (cartVarExists(cart, hgtaDoClearUserRegions))
     doClearUserRegions(conn);
 else if (cartVarExists(cart, hgtaDoMetaData))
     doMetaData(conn);
 else	/* Default - put up initial page. */
-    doMainPage(conn);
+    doMainPage(conn, FALSE);
 cartRemovePrefix(cart, hgtaDo);
+hFreeConn(&conn);
 }
 
 char *excludeVars[] = {"Submit", "submit", NULL};
 
 static void rAddTablesToHash(struct trackDb *tdbList, struct hash *hash)
 /* Add tracks in list to hash, keyed by tdb->table*/
 {
 struct trackDb *tdb;
 for (tdb = tdbList; tdb != NULL; tdb = tdb->next)
     {
     hashAdd(hash, tdb->table, tdb);
     if (tdb->subtracks)
         rAddTablesToHash(tdb->subtracks, hash);
     }
 }
@@ -1960,40 +1961,47 @@
  * take care of headers instead of using a fixed cart*Shell(). */
 cart = cartAndCookieNoContent(hUserCookie(), excludeVars, oldVars);
 
 /* Set up global variables. */
 allJoiner = joinerRead("all.joiner");
 getDbGenomeClade(cart, &database, &genome, &clade, oldVars);
 freezeName = hFreezeFromDb(database);
 
 int timeout = cartUsualInt(cart, "udcTimeout", 300);
 if (udcCacheTimeout() < timeout)
     udcSetCacheTimeout(timeout);
 #if ((defined USE_BAM || defined USE_TABIX) && defined KNETFILE_HOOKS)
 knetUdcInstall();
 #endif//def (USE_BAM || USE_TABIX) && KNETFILE_HOOKS
 
-if (lookupPosition())
-    {
     /* Init track and group lists and figure out what page to put up. */
     initGroupsTracksTables();
-
+if (lookupPosition())
+    {
     if (cartUsualBoolean(cart, hgtaDoGreatOutput, FALSE))
         doGetGreatOutput(dispatch);
     else
         dispatch();
     }
+else
+    {
+    struct sqlConnection *conn = NULL;
+    if (!trackHubDatabase(database))
+	conn = curTrack ? hAllocConnTrack(database, curTrack) : hAllocConn(database);
+    doMainPage(conn, TRUE);
+    hFreeConn(&conn);
+    }
 /* Save variables. */
 cartCheckout(&cart);
 }
 
 int main(int argc, char *argv[])
 /* Process command line. */
 {
 long enteredMainTime = clock1000();
 pushCarefulMemHandler(LIMIT_2or6GB);
 htmlPushEarlyHandlers(); /* Make errors legible during initialization. */
 cgiSpoof(&argc, argv);
 
 hgTables();
 
 textOutClose(&compressPipeline);