*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
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
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)
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__)