|
|
@@ -130,6 +130,8 @@ class TaskManager:
|
|
|
self.destroyed = False
|
|
|
self.fKeyboardInterrupt = False
|
|
|
self.interruptCount = 0
|
|
|
+ if signal:
|
|
|
+ self.__prevHandler = signal.default_int_handler
|
|
|
|
|
|
self._frameProfileQueue = []
|
|
|
|
|
|
@@ -171,7 +173,7 @@ class TaskManager:
|
|
|
print('*** allowing mid-frame keyboard interrupt.')
|
|
|
# Restore default interrupt handler
|
|
|
if signal:
|
|
|
- signal.signal(signal.SIGINT, signal.default_int_handler)
|
|
|
+ signal.signal(signal.SIGINT, self.__prevHandler)
|
|
|
# and invoke it
|
|
|
raise KeyboardInterrupt
|
|
|
|
|
|
@@ -487,25 +489,30 @@ class TaskManager:
|
|
|
chains that are in sub-threads or that have frame budgets
|
|
|
might execute their tasks differently. """
|
|
|
|
|
|
+ startFrameTime = self.globalClock.getRealTime()
|
|
|
+
|
|
|
# Replace keyboard interrupt handler during task list processing
|
|
|
# so we catch the keyboard interrupt but don't handle it until
|
|
|
# after task list processing is complete.
|
|
|
self.fKeyboardInterrupt = 0
|
|
|
self.interruptCount = 0
|
|
|
+
|
|
|
if signal:
|
|
|
- signal.signal(signal.SIGINT, self.keyboardInterruptHandler)
|
|
|
+ self.__prevHandler = signal.signal(signal.SIGINT, self.keyboardInterruptHandler)
|
|
|
|
|
|
- startFrameTime = self.globalClock.getRealTime()
|
|
|
+ try:
|
|
|
+ self.mgr.poll()
|
|
|
|
|
|
- self.mgr.poll()
|
|
|
+ # This is the spot for an internal yield function
|
|
|
+ nextTaskTime = self.mgr.getNextWakeTime()
|
|
|
+ self.doYield(startFrameTime, nextTaskTime)
|
|
|
|
|
|
- # This is the spot for an internal yield function
|
|
|
- nextTaskTime = self.mgr.getNextWakeTime()
|
|
|
- self.doYield(startFrameTime, nextTaskTime)
|
|
|
+ finally:
|
|
|
+ # Restore previous interrupt handler
|
|
|
+ if signal:
|
|
|
+ signal.signal(signal.SIGINT, self.__prevHandler)
|
|
|
+ self.__prevHandler = signal.default_int_handler
|
|
|
|
|
|
- # Restore default interrupt handler
|
|
|
- if signal:
|
|
|
- signal.signal(signal.SIGINT, signal.default_int_handler)
|
|
|
if self.fKeyboardInterrupt:
|
|
|
raise KeyboardInterrupt
|
|
|
|