A little more info has been determined via careful debugging. Hopefully HG can help me here, since he's the expert on this stuff.
I have confirmed, by looking at the GUI logs, that both Winboard and my other testing GUI send these commands to Myrddin in quick succession when an opponent moves:
time
otim
...followed by the opponent move.
When Myrddin is not pondering it handles these properly as it is just waiting for the opponent move before starting to think, so it can process all three commands sequentially before the engine starts thinking.
However, when pondering, the time command comes in and is processed. But then Myrddin never receives the otim command and just keeps pondering. Below is Myrddin's log. It starts pondering, receives and processes the time command (the "YES!" confirms that input is available), and then each of those "no 2/0" is the result of an attempt to check if there's input (the "2/0" confirms that the engine is in normal pondering mode). So, the result is that, even though the GUI has sent "otim", Myrddin sees no input...until I type "resign" in Winboard. Then it gets the otim, the move, and the resign all in one go, again because it has stopped thinking and is just waiting for input.
And finally, I went back to the source for my last release (in 2015) and compiled it with VS2019 and it exhibits the same broken behavior (which obviously wasn't there in the release). So I'm 99% sure it's the compiler. But why??? Are there some default compiler settings that could have caused this?
My brain hurts....
Code: Select all
Pondering on c3e4
think start, setting to ENGINE_THINKING
think start, setting to ENGINE_PONDERING
1 39 0 2 (c3e4) b8c6
1 43 0 8 (c3e4) g8f6
2 32 0 71 (c3e4) g8f6 d2d3 f6e4 d3e4
3 47 0 243 (c3e4) g8f6 d2d3 b8c6 d3e4
4 43 0 587 (c3e4) g8f6 d2d3 b8c6 g1f3
5 43 0 967 (c3e4) g8f6 d2d3 b8c6 g1f3
6 43 0 1349 (c3e4) g8f6 d2d3 b8c6 g1f3
7 43 0 2498 (c3e4) g8f6 d2d3 b8c6 g1f3
8 43 0 4062 (c3e4) g8f6 d2d3 b8c6 g1f3
9 43 0 6485 (c3e4) g8f6 d2d3 b8c6 g1f3
10 43 0 10468 (c3e4) g8f6 d2d3 b8c6 g1f3
11 43 0 16079 (c3e4) g8f6 d2d3 b8c6 g1f3
12 43 1 28846 (c3e4) g8f6 d2d3 b8c6 g1f3
no 2/0no 2/0no 2/0no 2/0no 2/013 43 17 293401 (c3e4) g8f6 d2d3 b8c6 g1f3
YES! 20
> Received time 23000
Handling Command time
< Finished time -- nThinkTime = 5700, nGameMove = 5
no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0
14 59 337 5604609 (c3e4) g8f6!
no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0
14 57 381 6345927 (c3e4) g8f6 e4f6 e7f6 e2e3 d4e3 g1f3 e3d2 c1d2 d8e7 d1e2 b8c6 f3d4 b8c6 e2e7
no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0
15 55 820 13662402 (c3e4) g8f6 e4f6 e7f6 e2e3 d4e3 g1f3 e3d2 c1d2 b8c6 f1b5 d8e7 d1e2 e7e2 e1e2 c8e6 f3d4 e6c4 e2e1 c4b5 d4b5
no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0 no 2/0
YES! 20
> Received otim 24000
Handling Command otim
< otim not supported
YES! 20
> Received c3e4
Handling Command c3e4
In move handling with c3e4
We just got a move -- nSideToMove = 1, nEngineMode == 2, nEngineCommand = 0
Backing out the pondering move
< move accepted: c3e4, nFifty=1
Ponder hit!
YES! 10
> Received result 1-0 {MyrddinComp resigns}