From: Roger Serwy Date: Wed, 12 Jun 2013 03:13:17 +0000 (-0500) Subject: #5492: Avoid traceback when exiting IDLE caused by a race condition. X-Git-Tag: v2.7.6rc1~356 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=16ce43a6d8c4f6e0da088c8bc68dbbbdbb2e9a36;p=thirdparty%2FPython%2Fcpython.git #5492: Avoid traceback when exiting IDLE caused by a race condition. --- diff --git a/Lib/idlelib/PyShell.py b/Lib/idlelib/PyShell.py index 0a77bb585365..1ae69499bc43 100644 --- a/Lib/idlelib/PyShell.py +++ b/Lib/idlelib/PyShell.py @@ -370,6 +370,7 @@ class ModifiedInterpreter(InteractiveInterpreter): self.port = PORT self.original_compiler_flags = self.compile.compiler.flags + _afterid = None rpcclt = None rpcpid = None @@ -497,6 +498,8 @@ class ModifiedInterpreter(InteractiveInterpreter): threading.Thread(target=self.__request_interrupt).start() def kill_subprocess(self): + if self._afterid is not None: + self.tkconsole.text.after_cancel(self._afterid) try: self.rpcclt.close() except AttributeError: # no socket @@ -569,8 +572,8 @@ class ModifiedInterpreter(InteractiveInterpreter): pass # Reschedule myself if not self.tkconsole.closing: - self.tkconsole.text.after(self.tkconsole.pollinterval, - self.poll_subprocess) + self._afterid = self.tkconsole.text.after( + self.tkconsole.pollinterval, self.poll_subprocess) debugger = None @@ -987,10 +990,6 @@ class PyShell(OutputWindow): self.stop_readline() self.canceled = True self.closing = True - # Wait for poll_subprocess() rescheduling to stop - self.text.after(2 * self.pollinterval, self.close2) - - def close2(self): return EditorWindow.close(self) def _close(self): diff --git a/Misc/NEWS b/Misc/NEWS index 1e28c3883ee6..1479f8497801 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -50,6 +50,8 @@ Build IDLE ---- +- Issue #5492: Avoid traceback when exiting IDLE caused by a race condition. + - Issue #17511: Keep IDLE find dialog open after clicking "Find Next". Original patch by Sarah K.