From f23d52b38596ee7337d363523eb77896dc737cc5 Mon Sep 17 00:00:00 2001 From: David Rose Date: Thu, 13 Jan 2005 18:11:14 +0000 Subject: [PATCH] trap exceptions on enter/exit methods and clean up fsm properly --- direct/src/fsm/FSM.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/direct/src/fsm/FSM.py b/direct/src/fsm/FSM.py index df2e32bf5f..6e3393a6cc 100644 --- a/direct/src/fsm/FSM.py +++ b/direct/src/fsm/FSM.py @@ -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