There is something in the XBoard code I do not understand:
In GameEnds() there is code to quit the engine if it is running
under the user option -xreuse (or has requested the reuse=0
feature by itself):
if (first.reuse) {
/* Put first chess program into idle state */
if (first.pr != NoProc &&
(gameMode == MachinePlaysWhite ||
gameMode == MachinePlaysBlack ||
gameMode == TwoMachinesPlay ||
gameMode == IcsPlayingWhite ||
gameMode == IcsPlayingBlack ||
gameMode == BeginningOfGame)) {
SendToProgram("force\n", &first);
if (first.usePing) {
char buf[MSG_SIZ];
snprintf(buf, MSG_SIZ, "ping %d\n", ++first.lastPing);
SendToProgram(buf, &first);
}
}
} else if (result != GameUnfinished || nextGameMode == IcsIdle) {
/* Kill off first chess program */
Why are unfinished games excluded from terminating
their engine process? With the current code they receive neither
"force" not "quit", and as far as I could see, when a user starts
a new game after this, the same engine process will receive "new"
and keep playing. (I checked process ID with "ps l" under Linux,
and after using "Action->Abort" on a game, and then starting a
new one, the PID stays indeed the same.)
This seems a violation of the -xreuse directive...