def event_loop_with_quit_event(self, quit_event):
'''
in kernel debugging session IDebugControl.WaitForEvent() must be called with an 'infinite' timeout value.
this is why we have to create thread that checks the given given quit event. once set it will force a debugger
break.
'''
if (self.is_deleted):
raise DebuggerException("called when object is deleted")
# sanity check on quit_event
#if (not isinstance(quit_event, threading._Event)):
# raise DebuggerException("invalid type for quit event")
# is already set?
if (quit_event.is_set()):
# no job for us
return
# create abort event
abort_quit_waiter_event = Event()
# start quit thread
quit_waiter = KernelAttacher.QuitEventWaiter(quit_event = quit_event, abort_event = abort_quit_waiter_event, top = self)
# event loop
self.__event_loop_with_forced_break_check(quit_event)
# stop quit waiter thread
self.dbg_eng_log("KernelAttacher.event_loop: waiting for quit_waiter to end")
abort_quit_waiter_event.set()
quit_waiter.join()
# dont wait for garbage collection, and force delete on self
self.__del__()
###########################################################
评论列表
文章目录