Suppress 2nd isready handshake on spurious 'new' master
authorH.G.Muller <hgm@hgm-xboard.(none)>
Fri, 21 Dec 2018 15:26:51 +0000 (16:26 +0100)
committerH.G.Muller <hgm@hgm-xboard.(none)>
Fri, 21 Dec 2018 15:26:51 +0000 (16:26 +0100)
The feature reuse=0 should limit the number of 'new' commands to one.
But unfortunately XBoard under some conditions sends a spurious second
game-start sequence before it quits a reuse=0 engine to start a new
instance. This caused (non-compliant) engines that do not always respond
to 'isready' (a disease especially common with USI) to dodge the 'quit'
command, which then caused hanging engine processes after the adapter was
killed. Only the first 'new' command in every run now uses 'isready',
so the 'quit' command that follows a spurious 2nd 'new' can be relayed
without delay.

UCI2WB.c

index 2ff532d..94b23dc 100644 (file)
--- a/UCI2WB.c
+++ b/UCI2WB.c
@@ -50,7 +50,7 @@ int statDepth, statScore, statNodes, statTime, currNr, size, collect, nr, sm, in
 char currMove[20], moveMap[500][10], /* for analyze mode */ canPonder[20], threadOpt[20], varList[8000], anaOpt[20], checkOptions[8192] = "Ponder";\r
 char pvs[99][999], board[100];  // XQ board for UCCI\r
 char *nameWord = "name ", *valueWord = "value ", *wTime = "w", *bTime = "b", *wInc = "winc", *bInc = "binc", newGame; // keywords that differ in UCCI\r
-int unit = 1, drawOffer, scores[99], mpvSP, maxDepth, ponderAlways;\r
+int unit = 1, drawOffer, scores[99], mpvSP, maxDepth, ponderAlways, newCnt;\r
 \r
 FILE *toE, *fromE, *fromF;\r
 int pid;\r
@@ -547,6 +547,7 @@ DoCommand ()
        if(!strcmp(command, "new")) {\r
            computer = BLACK; moveNr = 0; depth = -1; move[0][0] = 0;\r
            stm = WHITE; strcpy(iniPos, "position startpos"); frc &= ~1;\r
+           if(newCnt++) return; // prevent a 2nd 'isready' due to reuse=0-violating 'new' preceding 'quit'\r
            if(memory != oldMem && hasHash) EPRINT((f, "# setoption %s%s %s%d\n", nameWord, hashOpt, valueWord, memory))\r
            oldMem = memory;\r
            // we can set other options here\r