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

diff --git src/webBlat/webBlat.c src/webBlat/webBlat.c
index 8ec2b00..13e8767 100644
--- src/webBlat/webBlat.c
+++ src/webBlat/webBlat.c
@@ -296,31 +296,30 @@
 printf("  <FRAME SRC=\"%s\" NAME=\"body\">\n", bodyName);
 puts("<NOFRAMES><BODY></BODY></NOFRAMES>");
 puts("</FRAMESET>");
 puts("</HTML>\n");
 }
 
 
 void doBlat()
 /* Do actual blatting */
 {
 char *seqText = cgiString("wb_seq");
 bioSeq *seqList, *seq;
 char *type = NULL;
 boolean txServer = FALSE, protQuery = FALSE;
 struct gfServerAt *server;
-int conn;
 FILE *f;
 struct gfOutput *gvo;
 struct hash *tFileCache = gfFileCacheNew();
 char *pslName = cloneString(rTempName(cfg->tempDir, "wb", ".psl"));
 char *faName = cloneString(rTempName(cfg->tempDir, "wb", ".fa"));
 
 /* Figure out type and if it is a protein or a DNA based query */
 type = cgiUsualString("wb_qType", bothQueryMenu[0]);
 
 /* Get sequence from control into memory and also saved as fasta file. */
 if (sameWord(type, bothQueryMenu[0]))
     {
     seqList = faSeqListFromMemText(seqText, FALSE);
     if (seqList == NULL)
 	errAbort("Please go back and paste in a sequence");
@@ -349,63 +348,65 @@
     {
     freez(&seqList->name);
     seqList->name = cloneString("query");
     }
 faWriteAll(faName, seqList);
 
 /* Set up output for blat. */
 f = mustOpen(pslName, "w");
 gvo = gfOutputPsl(0, protQuery, FALSE, f, FALSE, TRUE);
 gvo->includeTargetFile = TRUE;
 
 txServer = isTxType(type);
 server = findServer(txServer);
 
 /* Loop through sequences doing alignments and saving to file. */
+struct gfConnection *conn = gfConnect(server->host, server->port, server->dynGenomeDir != NULL);
 for (seq = seqList; seq != NULL; seq = seq->next)
     {
-    conn = gfConnect(server->host, server->port);
     if (txServer)
         {
 	gvo->reportTargetStrand = TRUE;
 	if (protQuery)
 	    {
-	    gfAlignTrans(&conn, server->seqDir, seq, 5, tFileCache, gvo, server->dynGenomeDir);
+	    gfAlignTrans(conn, server->seqDir, seq, 5,
+                         tFileCache, gvo, server->genome, server->dynGenomeDir);
 	    }
 	else
 	    {
 	    boolean isRna = sameWord(type, "RNA");
-	    gfAlignTransTrans(&conn, server->seqDir, seq, FALSE, 5,
-			    tFileCache, gvo, isRna, NULL);
+	    gfAlignTransTrans(conn, server->seqDir, seq, FALSE, 5,
+                              tFileCache, gvo, isRna, server->genome, server->dynGenomeDir);
 	    if (!isRna)
 	        {
 		reverseComplement(seq->dna, seq->size);
-		conn = gfConnect(server->host, server->port);
-		gfAlignTransTrans(&conn, server->seqDir, seq, TRUE, 5,
-		                        tFileCache, gvo, FALSE, server->dynGenomeDir);
+		gfAlignTransTrans(conn, server->seqDir, seq, TRUE, 5,
+                                  tFileCache, gvo, FALSE, server->genome, server->dynGenomeDir);
 		}
 	    }
 	}
     else
         {
-	gfAlignStrand(&conn, server->seqDir, seq, FALSE, 16, tFileCache, gvo, server->dynGenomeDir);
+	gfAlignStrand(conn, server->seqDir, seq, FALSE, 16,
+                      tFileCache, gvo, server->genome, server->dynGenomeDir);
 	reverseComplement(seq->dna, seq->size);
-	conn = gfConnect(server->host, server->port);
-	gfAlignStrand(&conn, server->seqDir, seq, TRUE, 16, tFileCache, gvo, server->dynGenomeDir);
+	gfAlignStrand(conn, server->seqDir, seq, TRUE, 16,
+                      tFileCache, gvo, server->genome, server->dynGenomeDir);
 	}
     gfOutputQuery(gvo, f);
     }
+gfDisconnect(&conn);
 carefulClose(&f);
 
 /* Display alignment results. */
 aliLines(pslName, faName, server->name, type);
 }
 
 void doGetSeq()
 /* Put up form that asks them to submit sequence. */
 {
 char *qType = NULL;
 char **queryMenu = NULL;
 int queryMenuSize = 0;
 struct gfServerAt *serverList = NULL, *server;