36f8f6fb024b20cc523cdf9ebde7491eca84fd7c
markd
  Sun Dec 6 20:33:20 2020 -0800
multiple request per connect works except hgBlat

diff --git src/gfClient/gfClient.c src/gfClient/gfClient.c
index ef9a950..f063af3 100644
--- src/gfClient/gfClient.c
+++ src/gfClient/gfClient.c
@@ -100,75 +100,73 @@
 {
 struct lineFile *lf = lineFileOpen(inName, TRUE);
 static bioSeq seq;
 FILE *out = mustOpen(outName, "w");
 enum gfType qType = gfTypeFromName(qTypeName);
 enum gfType tType = gfTypeFromName(tTypeName);
 int dotMod = 0;
 char databaseName[256];
 struct hash *tFileCache = gfFileCacheNew();
 
 snprintf(databaseName, sizeof(databaseName), "%s:%s", hostName, portName);
 
 gvo = gfOutputAny(outputFormat,  round(minIdentity*10), qType == gftProt, tType == gftProt,
 	optionExists("nohead"), databaseName, 23, 3.0e9, minIdentity, out);
 gfOutputHead(gvo, out);
+struct gfConnection *conn = gfConnect(hostName, portName, (genome != NULL));
 while (faSomeSpeedReadNext(lf, &seq.dna, &seq.size, &seq.name, qType != gftProt))
     {
-    struct gfConnection *conn = gfConnect(hostName, portName);
     if (dots != 0)
         {
 	if (++dotMod >= dots)
 	    {
 	    dotMod = 0;
-	    fputc('.', stdout);
-	    fflush(stdout);
+            verboseDot();
 	    }
 	}
     if (qType == gftProt && (tType == gftDnaX || tType == gftRnaX))
         {
 	gvo->reportTargetStrand = TRUE;
 	gfAlignTrans(conn, tSeqDir, &seq, minScore, tFileCache, gvo, genome, genomeDataDir);
 	}
     else if ((qType == gftRnaX || qType == gftDnaX) && (tType == gftDnaX || tType == gftRnaX))
         {
 	gvo->reportTargetStrand = TRUE;
 	gfAlignTransTrans(conn, tSeqDir, &seq, FALSE, minScore, tFileCache, 
                           gvo, qType == gftRnaX, genome, genomeDataDir);
 	if (qType == gftDnaX)
 	    {
 	    reverseComplement(seq.dna, seq.size);
-	    gfDisconnect(&conn);
-	    conn = gfConnect(hostName, portName);
 	    gfAlignTransTrans(conn, tSeqDir, &seq, TRUE, minScore, tFileCache,
                               gvo, FALSE, genome, genomeDataDir);
 	    }
 	}
     else if ((tType == gftDna || tType == gftRna) && (qType == gftDna || qType == gftRna))
 	{
 	gfAlignStrand(conn, tSeqDir, &seq, FALSE, minScore, tFileCache, gvo, genome, genomeDataDir);
-	conn = gfConnect(hostName, portName);
 	reverseComplement(seq.dna, seq.size);
 	gfAlignStrand(conn, tSeqDir, &seq, TRUE,  minScore, tFileCache, gvo, genome, genomeDataDir);
 	}
     else
         {
 	errAbort("Comparisons between %s queries and %s databases not yet supported",
 		qTypeName, tTypeName);
 	}
     gfOutputQuery(gvo, out);
     }
+gfDisconnect(&conn);
+
 if (out != stdout)
     printf("Output is in %s\n", outName);
 gfFileCacheFree(&tFileCache);
 }
 
 int main(int argc, char *argv[])
 /* Process command line. */
 {
 optionInit(&argc, argv, optionSpecs);
 if (argc != 6)
     usage();
 if (optionExists("prot"))
     qType = tType = "prot";
 qType = optionVal("q", qType);
 tType = optionVal("t", tType);