Change StopPonder() into more general StopSearch()
authorH.G.Muller <hgm@hgm-xboard.(none)>
Sat, 8 Dec 2018 12:42:53 +0000 (13:42 +0100)
committerH.G.Muller <hgm@hgm-xboard.(none)>
Sat, 8 Dec 2018 12:42:53 +0000 (13:42 +0100)
As StopPonder was only still used to unconditionally abort searches of
any kind, it is changed into a general StopSearch() routine that handles
the tasks that otherwise were performed before calling it. In particular
it refrains from stopping a search if none is going on, and conditionally
(based on its argument) sets 'searching' to idle if the move the search
will come up with has to be ignored.

UCI2WB.c

index b901bbc..8715276 100644 (file)
--- a/UCI2WB.c
+++ b/UCI2WB.c
@@ -160,9 +160,10 @@ StartSearch(char *ponder)
 }\r
 \r
 void\r
 }\r
 \r
 void\r
-StopPonder(int pondering)\r
+StopSearch(int discard)\r
 {\r
 {\r
-       if(!pondering) return;\r
+       if(!searching) return;\r
+       if(discard) searching = 0; // this causes bestmove to be ignored\r
        EPRINT((f, "# stop\n")) fflush(toE); // note: 'pondering' remains set until engine acknowledges 'stop' with 'bestmove'\r
 }\r
 \r
        EPRINT((f, "# stop\n")) fflush(toE); // note: 'pondering' remains set until engine acknowledges 'stop' with 'bestmove'\r
 }\r
 \r
@@ -460,7 +461,7 @@ GUI2Engine()
        else if(!strcmp(command, "pause")) {\r
            if(computer == stm) myTime -= GetTickCount() - startTime;\r
            suspended = 1 + (searching == 1); // remember if we were pondering, and stop search ignoring bestmove\r
        else if(!strcmp(command, "pause")) {\r
            if(computer == stm) myTime -= GetTickCount() - startTime;\r
            suspended = 1 + (searching == 1); // remember if we were pondering, and stop search ignoring bestmove\r
-           if(searching) searching = 0, StopPonder(1);\r
+           StopSearch(1);\r
        }\r
        else { //convert easy & hard to "option" after treating their effect on the adapter\r
          if(!strcmp(command, "easy")) {\r
        }\r
        else { //convert easy & hard to "option" after treating their effect on the adapter\r
          if(!strcmp(command, "easy")) {\r
@@ -493,7 +494,7 @@ GUI2Engine()
                    EPRINT((f, "# ponderhit%s\n", draw)) fflush(toE); fflush(stdout);\r
                    continue;\r
                }\r
                    EPRINT((f, "# ponderhit%s\n", draw)) fflush(toE); fflush(stdout);\r
                    continue;\r
                }\r
-               searching = 0; StopPonder(1);\r
+               StopSearch(1);\r
            }\r
            strcpy(move[moveNr++], command); // possibly overwrites ponder move\r
            *qEnd++ = '\n'; Sync(WAKEUP);    // make sure engine thread considers starting a search\r
            }\r
            strcpy(move[moveNr++], command); // possibly overwrites ponder move\r
            *qEnd++ = '\n'; Sync(WAKEUP);    // make sure engine thread considers starting a search\r
@@ -505,8 +506,8 @@ GUI2Engine()
       {\r
        if(searching == 3) { // command arrived during thinking; order abort for 'instant commands'\r
            if(!strcmp(command, "?") || !strcmp(command, "quit") ||\r
       {\r
        if(searching == 3) { // command arrived during thinking; order abort for 'instant commands'\r
            if(!strcmp(command, "?") || !strcmp(command, "quit") ||\r
-              !strcmp(command, "force") || !strcmp(command, "result")) StopPonder(1);\r
-       } else if(searching) searching = 0, StopPonder(1); // always abort pondering or analysis\r
+              !strcmp(command, "force") || !strcmp(command, "result")) StopSearch(0);\r
+       } else StopSearch(1); // always abort pondering or analysis\r
 \r
        // queue command for execution by engine thread\r
        if(qStart == qEnd) qStart = qEnd = queue;\r
 \r
        // queue command for execution by engine thread\r
        if(qStart == qEnd) qStart = qEnd = queue;\r