[erlang-questions] Gen_fsm : race condition with a next_state timeout of zero?

Dmitry Kolesnikov <>
Wed Sep 25 06:15:21 CEST 2013


Hello,

Yes, it is possible. Timeout message is stored to mailbox if there are other messages in mailbox they are evaluated before timeout.

I am doing explicit calls to avoid such issues.
stateA(...) ->
  %% do something
   stateB(myevent

Best Regards,
Dmitry >-|-|-*>


> On 25.9.2013, at 3.23, Andy Gooden <> wrote:
> 
> Hi All, 
> I have a gen_fsm, where upon completing the handling of a message in state_A, I want to immediately transition into state_B... so I have state_A evaluate to:  {next_state, state_B, State, Timeout = 0}.
> 
> In my code, this is the only way to transition into state_B, so I only have implemented:
> state_B ( timeout, State ) -> ...
> 
> Is it possible, if other processes are sending my fsm messages, for me to get a message in my queue while executing state_A code, but then have to handle that message with state_B code?  
> ie  will the immediate transition to state_B via the Timeout = 0 trump any messages that landed in the queue?
> 
> The reason I ask is that I see an error message that looks like state_B is having to handle a message other than 'timeout', even though the only way to get into state_B is from state_A with Timeout = 0.
> 
> Thanks!
> Andy
> 
> 
> _______________________________________________
> erlang-questions mailing list
> 
> http://erlang.org/mailman/listinfo/erlang-questions


More information about the erlang-questions mailing list