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(). M NEWS.txt M rpc.py Backport candidate.
This commit is contained in:
parent
af3eb87802
commit
d6ab77d27d
|
@ -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
|
||||
|
|
|
@ -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__)
|
||||
|
|
Loading…
Reference in New Issue