c74baf995ca1b7d3de1b1af4b125afa4c9d39b39
angie
  Wed Jun 22 08:55:07 2016 -0700
Yet another case of assuming a mysql db, which breaks track hubs.  refs #17582 MLQ and probably a follow-up patch request.

diff --git src/hg/lib/cartTrackDb.c src/hg/lib/cartTrackDb.c
index 984fce9..3efab84 100644
--- src/hg/lib/cartTrackDb.c
+++ src/hg/lib/cartTrackDb.c
@@ -217,60 +217,63 @@
     }
 else
     {
     struct accessControl *ac = hel->val;
     ac->isNoGenome = isNoGenome;
     accessControlAddHost(ac, host);
     }
 }
 
 static struct hash *accessControlInit(char *db)
 /* Return a hash associating restricted table/track names in the given db/conn
  * with virtual hosts -- hash is empty if there is no tableAccessControl table and no
  * accessControlTrackRefList (see getFullTrackList). */
 {
 struct hash *acHash = hashNew(0);
+if (! trackHubDatabase(db))
+    {
     struct sqlConnection *conn = hAllocConn(db);
     if (sqlTableExists(conn, "tableAccessControl"))
         {
         struct sqlResult *sr = NULL;
         char **row = NULL;
         acHash = newHash(0);
         sr = sqlGetResult(conn, NOSQLINJ "select name,host from tableAccessControl");
         while ((row = sqlNextRow(sr)) != NULL)
             acHashAddOneTable(acHash, row[0], chopAtFirstDot(row[1]), FALSE);
         sqlFreeResult(&sr);
         }
+    hFreeConn(&conn);
+    }
 struct slRef *tdbRef;
 for (tdbRef = accessControlTrackRefList; tdbRef != NULL; tdbRef = tdbRef->next)
     {
     struct trackDb *tdb = tdbRef->val;
     char *tbOff = cloneString(trackDbSetting(tdb, "tableBrowser"));
     if (isEmpty(tbOff))
         errAbort("accessControlInit bug: tdb for %s does not have tableBrowser setting",
                  tdb->track);
     // First word is "off" or "noGenome":
     char *type = nextWord(&tbOff);
     boolean isNoGenome = sameString(type, "noGenome");
     // Add track table to acHash:
     acHashAddOneTable(acHash, tdb->table, NULL, isNoGenome);
     // Remaining words are additional table names to add:
     char *tbl;
     while ((tbl = nextWord(&tbOff)) != NULL)
         acHashAddOneTable(acHash, tbl, NULL, isNoGenome);
     }
-hFreeConn(&conn);
 return acHash;
 }
 
 static struct hash *getCachedAcHash(char *db)
 /* Returns a hash that maps table names to accessControl, creating it if necessary. */
 {
 static struct hash *dbToAcHash = NULL;
 if (dbToAcHash == NULL)
     dbToAcHash = hashNew(0);
 struct hash *acHash = hashFindVal(dbToAcHash, db);
 if (acHash == NULL)
     {
     acHash = accessControlInit(db);
     hashAdd(dbToAcHash, db, acHash);
     }