Mercurial > cpython-lru_cache-weakref
diff Lib/idlelib/PyShell.py @ 29171:9cf09f92b198 legacy-trunk
Fix race exposed by 2.4 GHz XP box: Don't tear down PyShell until
subprocess polling has terminated. Tk callit gets unhappy if it can't
find the function 'after' scheduled to run.
M PyShell.py
| author | Kurt B. Kaiser <kbk@shore.net> |
|---|---|
| date | Mon, 19 May 2003 23:11:51 +0000 |
| parents | c7dfda993b2f |
| children | be70b8477f43 |
line wrap: on
line diff
--- a/Lib/idlelib/PyShell.py Mon May 19 19:57:42 2003 +0000 +++ b/Lib/idlelib/PyShell.py Mon May 19 23:11:51 2003 +0000 @@ -426,8 +426,6 @@ except (EOFError, IOError, KeyboardInterrupt): # lost connection or subprocess terminated itself, restart # [the KBI is from rpc.SocketIO.handle_EOF()] - if self.tkconsole.closing: - return response = None self.restart_subprocess() self.tkconsole.endexecuting() @@ -448,8 +446,10 @@ print >>console, errmsg, what # we received a response to the currently active seq number: self.tkconsole.endexecuting() - # Reschedule myself in 50 ms - self.tkconsole.text.after(50, self.poll_subprocess) + # Reschedule myself + if not self.tkconsole.closing: + self.tkconsole.text.after(self.tkconsole.pollinterval, + self.poll_subprocess) debugger = None @@ -716,6 +716,7 @@ # self.history = self.History(self.text) # + self.pollinterval = 50 # millisec if use_subprocess: self.interp.start_subprocess() @@ -798,7 +799,12 @@ self.interp.interrupt_subprocess() return "cancel" else: - return EditorWindow.close(self) + 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): "Extend EditorWindow._close(), shut down debugger and execution server"
