erlangerlang-supervisorgen-fsm

how to handle termination of gen_fsm


I have a MAIN process that spawn an implementation of a gen_fsm behavior, but this MAIN process is not an implementation of supervisor behavior, its just another module. Let say the implementation of gen_fsm is called GAME_ROOM. My case is like this:

  1. When ever there are 3 peoples ready, the MAIN process will spawn a new GAME_ROOM.
  2. I use gen_fsm:start_link function to initiate a new GAME_ROOM, so if the GAME_ROOM exit by error, my MAIN process could spawn a new one, to replace the downed process.
  3. I managed to make my MAIN process detect the EXIT event of all downed GAME_ROOM

The problem is: I need to restore all downed GAME_ROOM states at the new one. My question is: How can I use gen_fsm's terminate function to pass the latest states of the gen_fsm to my MAIN process, so when I respawn a new GAME_ROOM, I can pass that states?


Solution

  • One simple way would be for GAME_ROOM terminate/3 to send a message with the necessary state information to MAIN. For this to work the GAME_ROOM must know the pid of MAIN (easy) and you have to be certain that terminate/3 is really called.