diff options
-rw-r--r-- | Lib/idlelib/NEWS.txt | 8 | ||||
-rw-r--r-- | Lib/idlelib/rpc.py | 14 |
2 files changed, 14 insertions, 8 deletions
diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt index 7f52564..e2d4fc0 100644 --- a/Lib/idlelib/NEWS.txt +++ b/Lib/idlelib/NEWS.txt @@ -3,6 +3,14 @@ What's New in IDLE 1.1a0? *Release date: XX-XXX-2004* +- rpc.py:SocketIO - Large modules were generating large pickles when downloaded + to the execution server. The return of the OK response from the subprocess + initialization was interfering and causing the sending socket to be not + ready. Add an IO ready test to fix this. Moved the polling IO ready test + into pollpacket(). + +- Fix typo in rpc.py, s/b "pickle.PicklingError" not "pickle.UnpicklingError". + - Added a Tk error dialog to run.py inform the user if the subprocess can't connect to the user GUI process. Added a timeout to the GUI's listening socket. Added Tk error dialogs to PyShell.py to announce a failure to bind diff --git a/Lib/idlelib/rpc.py b/Lib/idlelib/rpc.py index 90451e3..d3a9fd8 100644 --- a/Lib/idlelib/rpc.py +++ b/Lib/idlelib/rpc.py @@ -320,23 +320,20 @@ class SocketIO: self.debug("putmessage:%d:" % message[0]) try: s = pickle.dumps(message) - except pickle.UnpicklingError: + except pickle.PicklingError: print >>sys.__stderr__, "Cannot pickle:", `message` raise s = struct.pack("<i", len(s)) + s while len(s) > 0: try: - n = self.sock.send(s) + r, w, x = select.select([], [self.sock], []) + n = self.sock.send(s[:BUFSIZE]) except (AttributeError, socket.error): # socket was closed raise IOError else: s = s[n:] - def ioready(self, wait): - r, w, x = select.select([self.sock.fileno()], [], [], wait) - return len(r) - buffer = "" bufneed = 4 bufstate = 0 # meaning: 0 => reading count; 1 => reading data @@ -344,7 +341,8 @@ class SocketIO: def pollpacket(self, wait): self._stage0() if len(self.buffer) < self.bufneed: - if not self.ioready(wait): + r, w, x = select.select([self.sock.fileno()], [], [], wait) + if len(r) == 0: return None try: s = self.sock.recv(BUFSIZE) @@ -377,7 +375,7 @@ class SocketIO: return None try: message = pickle.loads(packet) - except: + except pickle.UnpicklingError: print >>sys.__stderr__, "-----------------------" print >>sys.__stderr__, "cannot unpickle packet:", `packet` traceback.print_stack(file=sys.__stderr__) |