I have once again experienced the "cannot move, cannot move" bug, so I
decided to look at it again. I tried the method I mentioned a few months
ago, and it still works and deterministically crashes gnubg.
I looked at the stack trace (you can take a look at the attachment if
the maillist passes it through, but it is not really interesting) and
the important thing is that there are many (I clicked dices many times)
identical layers of gnubg interleaved with libgtk. After checking the
source, IMHO the problem is that during the addition of the move to the
gamelist, PopMoveRecord is called, which in turn calls GTKSetMoveRecord,
which contains a message dispatch loop with gtk_main_iteration(). And,
obviously, during this call another dice click is detected... and here
we go again. Finally, this seems to end in a crash as PopGame tries to
delete the move list.
Unfortunately (as I have said before) I never worked with GTK, so I am
unable to dive into the problem too much. AFAICS, the basic idea of
calling gtk_main_iteration() deep inside the game logic code seems
not-really-right to me, but I understand that there is some logic with
enabling and disabling input, so that it is probably expected to work,
but ... well, it does not for me.