272ce7d17ccd6584fe03f8e226cd32c77ff900c1
hiram
  Thu Aug 5 10:28:28 2021 -0700
do not try to open the json mouseOver file when it is not possible refs #27954

diff --git src/hg/hgTracks/hgTracks.c src/hg/hgTracks/hgTracks.c
index e6cc64a..a661d59 100644
--- src/hg/hgTracks/hgTracks.c
+++ src/hg/hgTracks/hgTracks.c
@@ -10889,31 +10889,32 @@
 jsonObjectAdd(jsonForClient, "measureTiming", newJsonBoolean(measureTiming));
 // js code needs to know if a highlightRegion is defined for this db
 checkAddHighlight(); // call again in case tracksDisplay's call to resolvePosition changed vars
 char *highlightDef = cartOptionalString(cart, "highlight");
 if (highlightDef)
     jsonObjectAdd(jsonForClient, "highlight", newJsonString(highlightDef));
 jsonObjectAdd(jsonForClient, "enableHighlightingDialog",
 	      newJsonBoolean(cartUsualBoolean(cart, "enableHighlightingDialog", TRUE)));
 
 struct dyString *dy = dyStringNew(1024);
 jsonDyStringPrint(dy, (struct jsonElement *) jsonForClient, "hgTracks", 0);
 jsInline(dy->string);
 dyStringFree(&dy);
 
 dy = dyStringNew(1024);
-if (enableMouseOver)
+// do not have a JsonFile available when PDF/PS output
+if (enableMouseOver && isNotEmpty(mouseOverJsonFile->forCgi))
     {
     jsonWriteObjectEnd(mouseOverJson);
     /* if any data was written, it is longer than 4 bytes */
     if (strlen(mouseOverJson->dy->string) > 4)
 	{
 	FILE *trashJson = mustOpen(mouseOverJsonFile->forCgi, "w");
 	fputs(mouseOverJson->dy->string,trashJson);
 	carefulClose(&trashJson);
 	}
 
     hPrintf("<div id='mouseOverVerticalLine' class='mouseOverVerticalLine'></div>\n");
     hPrintf("<div id='mouseOverText' class='mouseOverText'></div>\n");
     dyStringPrintf(dy, "window.browserTextSize=%s;\n", tl.textSize);
     dyStringPrintf(dy, "window.mouseOverEnabled=true;\n");
     }