]> granicus.if.org Git - python/commitdiff
rpc.py:SocketIO - Large modules were generating large pickles when downloaded
authorKurt B. Kaiser <kbk@shore.net>
Wed, 21 Jan 2004 19:21:11 +0000 (19:21 +0000)
committerKurt B. Kaiser <kbk@shore.net>
Wed, 21 Jan 2004 19:21:11 +0000 (19:21 +0000)
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().

M NEWS.txt
M rpc.py

Backport candidate.

Lib/idlelib/NEWS.txt
Lib/idlelib/rpc.py

index 7f52564f3192f5b6df08d0c85fc19b6eb602990e..e2d4fc0c93505a0d777f4de4d397a232e6288f55 100644 (file)
@@ -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
index 90451e39bbe246164b35ad7338b2090b9f522aa8..d3a9fd8e68fa142f3b5a9a1b58e375239cd53412 100644 (file)
@@ -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__)