Use 'isready' after 'ucinewgame' master
authorH.G.Muller <hgm@hgm-xboard.(none)>
Mon, 25 Jan 2021 20:33:09 +0000 (21:33 +0100)
committerH.G.Muller <hgm@hgm-xboard.(none)>
Mon, 25 Jan 2021 20:33:09 +0000 (21:33 +0100)
The isready / readyok poll is re-instated for UCI engines, just to
give them no excuse to be pedantic and use its absense as an excuse
to crash. The GUI will not be made aware of any waiting for the readyok.
For USI the use of isready after usinewgame is still avoided, as this
would make most engine hang.

UCI2WB.c

index 76997e9..7251f5d 100644 (file)
--- a/UCI2WB.c
+++ b/UCI2WB.c
@@ -541,7 +541,12 @@ GUI2Engine()
     }\r
 }\r
 \r
-\r
+void\r
+IsReady ()\r
+{\r
+    EPRINT((f, "# isready\n")) fflush(toE);\r
+    HandleEngineOutput(); // wait for readyok\r
+}\r
 \r
 void\r
 DoCommand ()\r
@@ -560,10 +565,9 @@ DoCommand ()
            oldMem = memory;\r
            // we can set other options here\r
            if(varOpt && strstr(varList, ",normal")) EPRINT((f, "# setoption name UCI_Variant value chess\n"))\r
-           EPRINT((f, "# isready\n")) fflush(toE);\r
-           HandleEngineOutput(); // wait for readyok\r
+           IsReady();\r
            if(sc == 'x') { if(newGame) EPRINT((f, "# setoption newgame\n")) } else // optional in UCCI\r
-           EPRINT((f, "# u%cinewgame\n", sc)) fflush(toE);\r
+               { EPRINT((f, "# u%cinewgame\n", sc)) fflush(toE); if(sc != 's') IsReady(); } // avoid isready in USI\r
        }\r
         else if(!strcmp(command, "e")) { strcpy(move[moveNr++], type); stm ^= WHITE|BLACK; return; }\r
        else if(!strcmp(command, "option")) {\r