← Thread:Talk:RoboRumble/ThreadDeath problem/reply (21)
I think you're on the right track, it definitely feels like race conditions to me. However in this case you're wrong - both code blocks (println and readOutText) are synchronized with the same object, so they can't run at the same time. It isn't important which one they are synchronized with, it could even be a different object. See the sharedLock example here.
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() first, yet the print message never made its way to the console (as is shown in Beaming's log).
I think skipped turns are working as they should, they're just not being reported.
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.
You do not have permission to edit this page, for the following reasons:
- The action you have requested is limited to users in the group: Users.
- You must confirm your email address before editing pages. Please set and validate your email address through your user preferences.
You can view and copy the source of this page.Beaming (talk)