trap exceptions on enter/exit methods and clean up fsm properly

This commit is contained in:
David Rose 2005-01-13 18:11:14 +00:00
parent 8d1a458c00
commit f23d52b385
1 changed files with 15 additions and 2 deletions

View File

@ -340,8 +340,21 @@ class FSM(DirectObject.DirectObject):
self.oldState = self.state
self.newState = newState
self.state = None
self.__callTransitionFunc("exit" + self.oldState)
self.__callTransitionFunc("enter" + self.newState, *args)
try:
self.__callTransitionFunc("exit" + self.oldState)
self.__callTransitionFunc("enter" + self.newState, *args)
except:
# If we got an exception during the enter or exit methods,
# return to the previous state and raise up the exception.
# This might leave things a little unclean since we've
# partially transitioned, but what can you do?
self.state = self.oldState
del self.oldState
del self.newState
raise
self.state = newState
del self.oldState
del self.newState