mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-27 23:34:57 -04:00
task: Restore previous interrupt handler after taskMgr.step()
Related to #1180
This commit is contained in:
parent
2915c6e670
commit
2aac58b5ab
@ -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
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user