Page 1 of 1

4.5.2a (Linux) sends result after program termination

PostPosted: 21 Mar 2012, 01:25
by jdart
I saw some strange behavior - Arasan was playing Gnuchess on FICS, and after the game was over (FICS had sent result), Arasan crashed. xboard though is still trying to send it commands (although the process is dead) and it is sending the incorrect result (result was 1-0 because GnuChess resigned, but xboard sends 0-1 because Arasanx later crashed). I don't think this causes any actual problem but xboard probably shouldn't try to send commands to a process it knows is dead. End of the debug log follows.

Code: Select all
1600947 >first : result 1-0 {GnuCheese resigns}
1600948 >first : force
1600948 >first : ping 4
>ICS: gameend\015\012
>ICS: \015\012
Reset(1, 1) from gameMode 11
recognized 'normal' (-1) as variant normal
GameEnds(0, (null), 2)
shuffleOpenings = 0
1600950 >first : memory 516
1600950 >first : egtpath nalimov c:\egtb
1600950 >first : cores 4
1600950 >first : new
random
1600950 >first : ics freechess.org
1600950 >first : post
1600950 >first : hard
1600950 >first : ping 5
1600950 <first : # received 31 chars: # check_command: result 1-0 {GnuCheese resigns}
1600950 <first : # adding to pending list result 1-0 {GnuCheese resigns}, list size=0
1600950 <first : # received_result: result 1-0 {GnuCheese resigns}
1600950 <first : # terminating search (controller)
1600950 <first : # received 6 chars: # check_command: force
1600950 <first : # terminating search (controller)
1600950 <first : # received 7 chars: # check_command: ping 4
1600950 <first : # time check interval=508124 elapsed_time=553pong 4
1600950 <first :  target=99999
1600950 <first : # done pondering
1600950 <first : # ponder move = a5-a6
1600950 <first : # out of ponder()
1600950 <first : removing:
<ICS: Your seek has been posted with index 7.\012\015(1 player(s) saw the seek.)\012\015fics%
ics input 0, castling = 7 0 4 7 0 4
GameEnds(26, Error: first chess program (/home/jdart/arasan-14.2.0/export/arasanx -H 512m -c 4 -ics -t) exited unexpectedly, 2)
1600984 >first : result 0-1 {Error: first chess program (/home/jdart/arasan-14.2.0/export/arasanx -H 512m -c 4 -ics -t) exited unexpectedly}
1600985 >first : force
1600985 >first : ping 6
1600985 >first : quit

Re: 4.5.2a (Linux) sends result after program termination

PostPosted: 21 Mar 2012, 09:20
by H.G.Muller
The 0-1 is for the next game (with no moves yet). In Zippy mode XBoard always starts a new game as soon as the old one finishes. The result of the GNU Chess game (1-0) was properly sent to Arasan before. (That makes you wonder why the crash is adjudicated as 0-1, as it is at this point not clear which color the engine will play. So XBoard is neither in the mode IcsPlayingWhite or IcsPlayingBlack, but just at BeginningOfGame. Games without moves are never saved, however, so this is a moot point.)

Obviously no commands can be send to a dead process at all, and XBoard doesn't really attempt that, as the detection of the crash (by an EOF on the input thread for the engine) that triggered GameEnds has already closed down the output channel (to prevent recursion of errors producing an avalanche of error popups). The commands normally sent in the process of terminating a game by GameEnds still go into the debug file, though. Apparently the testing if the output is still open is done after the write to the debug file.

I don't consider this harmful in any way. It can in fact be helpful to diagnose problems in XBoard caused by the engine crash. Which is the primary purpose of the debug file in the first place.

Re: 4.5.2a (Linux) sends result after program termination

PostPosted: 21 Mar 2012, 16:25
by jdart
Ok, thanks for the explanation.

--Jon