
I only call process_event directly from outside the state machine.
From inside, I do call transit() in a couple of reactions. That's
how I understood guards were implemented. Maybe I missed something?
As long as you call transit (and its relatives like e.g. terminate) only from react functions, you're not missing anything.
Some of
those transit() calls are to sibling states but most are to an uncle state (sibling to parent state). I
never transit() to the same state.
You can transit to any state, even the one you are currently in, so no problem here either.
In few state's constructors, I call post_event().
That's fine too. So far everything seems in order. The only suggestion I have is that you try to reproduce the problem and then whittle it down to something that you are comfortable to post or send me by private email. I know this is sometimes hard, but the statechart internals are such that the library should exhibit exactly the same behavior when two newly constructed FSMs of the same type are fed the same events in the same order. So, if possible log all events and wait for the problem to resurface? Regards, Andreas