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
diff --git a/Lib/idlelib/PyShell.py b/Lib/idlelib/PyShell.py
index d978fc2..dc47f07 100644
--- a/Lib/idlelib/PyShell.py
+++ b/Lib/idlelib/PyShell.py
@@ -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"