println() is definitely broken somehow. There is no way that
checkSkippedTurn() could have called
forceStopThread() (as is shown in the stacktrace), without going through
println(), yet the print message never made its way to the console.
battleText is also cleared in
initializeRound() and [https://github.com/robo-code/robocode/blob/0eb93ba532bc6731b7ff8dd02da1308d92ccb2fd/robocode.battle/src/main/java/net/sf/robocode/battle/peer/RobotPeer.java#L1685
cleanup(), both of which have no synchronization guards at all.
Good catch. I've added synchronization guards on the initializeRound() and cleanup() and now I get the
SYSTEM: Neuromancer 5.4 has not performed any actions in a reasonable amount of time. printed inside the correct round. The ThreadDeath is still printed in the round after, but I can live with that I guess.
Now for the next question, why is this even happening?
Would you please share the patch? My multithreading skills are not that good.
@ MultiplyByZer0, excellent analysis. I would never spotted it.
To add to mysteries. Why I do not see dramatic drop in scores if I run Voidious' RoboRunner? I see missing SYSTEM messages in logs but it does not affect scores the same drastic way as with the literumble client. I also see no ThreadDeath messages. I am guessing RoboRunner catches those somehow and process the score differently.