changeset: 84097:187da33826eb parent: 84093:e6fc120012e5 parent: 84096:da852f5250af user: Roger Serwy date: Tue Jun 11 22:13:51 2013 -0500 files: Lib/idlelib/PyShell.py Misc/NEWS description: #5492: merge with 3.3 diff -r e6fc120012e5 -r 187da33826eb Lib/idlelib/PyShell.py --- a/Lib/idlelib/PyShell.py Tue Jun 11 14:40:23 2013 -0700 +++ b/Lib/idlelib/PyShell.py Tue Jun 11 22:13:51 2013 -0500 @@ -367,6 +367,7 @@ self.port = PORT self.original_compiler_flags = self.compile.compiler.flags + _afterid = None rpcclt = None rpcsubproc = None @@ -486,6 +487,8 @@ 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.listening_sock.close() except AttributeError: # no socket @@ -561,8 +564,8 @@ 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 @@ -973,10 +976,6 @@ 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 -r e6fc120012e5 -r 187da33826eb Misc/NEWS --- a/Misc/NEWS Tue Jun 11 14:40:23 2013 -0700 +++ b/Misc/NEWS Tue Jun 11 22:13:51 2013 -0500 @@ -455,6 +455,8 @@ 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.