Move setting of ioready 'wait' earlier in call chain, to

rpc.SocketIO.main() and asyncreturn().  Improve comment.
This commit is contained in:
Kurt B. Kaiser 2003-03-12 20:52:00 +00:00
parent b1fbf855a3
commit 94afd3095e
2 changed files with 24 additions and 8 deletions

View File

@ -7,11 +7,27 @@ What's New in IDLEfork 0.9 Alpha 3?
*Release date: xx-xxx-2003* *Release date: xx-xxx-2003*
- Implemented the 'interrupt' extension module, which allows a subthread
to raise a KeyboardInterrupt in the main thread.
- Attempting to save the shell raised an error related to saving
breakpoints, which are not implemented in the shell
- Provide a correct message when 'exit' or 'quit' are entered at the
IDLE command prompt SF 695861
- Eliminate extra blank line in shell output caused by not flushing
stdout when user code ends with an unterminated print. SF 695861
- Moved responsibility for exception formatting (i.e. pruning IDLE internal
calls) out of rpc.py into the client and server.
- Exit IDLE cleanly even when doing subprocess I/O - Exit IDLE cleanly even when doing subprocess I/O
- Handle subprocess interrupt in Windows with an RPC message. - Handle subprocess interrupt in Windows with an RPC message.
- Calling Run will restart the subprocess even if user code is running. - Calling Run will restart the subprocess even if user code is running.
SF RFE 661321
- Restart the subprocess if it terminates itself. (VPython programs do that) - Restart the subprocess if it terminates itself. (VPython programs do that)

View File

@ -192,7 +192,7 @@ class SocketIO:
def asyncreturn(self, seq): def asyncreturn(self, seq):
self.debug("asyncreturn:%d:call getresponse(): " % seq) self.debug("asyncreturn:%d:call getresponse(): " % seq)
response = self.getresponse(seq) response = self.getresponse(seq, wait=None)
self.debug(("asyncreturn:%d:response: " % seq), response) self.debug(("asyncreturn:%d:response: " % seq), response)
return self.decoderesponse(response) return self.decoderesponse(response)
@ -211,17 +211,17 @@ class SocketIO:
def mainloop(self): def mainloop(self):
"""Listen on socket until I/O not ready or EOF """Listen on socket until I/O not ready or EOF
pollpacket() will loop looking for seq number None, which never Main thread pollresponse() will loop looking for seq number None, which
comes. The loop will exit when self.ioready() returns 0. never comes, and exit on EOFError.
""" """
try: try:
self.getresponse(None) self.getresponse(myseq=None, wait=None)
except EOFError: except EOFError:
pass pass
def getresponse(self, myseq): def getresponse(self, myseq, wait):
response = self._getresponse(myseq) response = self._getresponse(myseq, wait)
if response is not None: if response is not None:
how, what = response how, what = response
if how == "OK": if how == "OK":
@ -236,13 +236,13 @@ class SocketIO:
# XXX Check for other types -- not currently needed # XXX Check for other types -- not currently needed
return obj return obj
def _getresponse(self, myseq): def _getresponse(self, myseq, wait):
self.debug("_getresponse:myseq:", myseq) self.debug("_getresponse:myseq:", myseq)
if threading.currentThread() is self.mainthread: if threading.currentThread() is self.mainthread:
# Main thread: does all reading of requests or responses # Main thread: does all reading of requests or responses
# Loop here, blocking each time until socket is ready. # Loop here, blocking each time until socket is ready.
while 1: while 1:
response = self.pollresponse(myseq, wait=None) response = self.pollresponse(myseq, wait)
if response is not None: if response is not None:
return response return response
else: else: