Commit 94afd309 authored by Kurt B. Kaiser's avatar Kurt B. Kaiser

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

rpc.SocketIO.main() and asyncreturn().  Improve comment.
parent b1fbf855
...@@ -7,11 +7,27 @@ What's New in IDLEfork 0.9 Alpha 3? ...@@ -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)
......
...@@ -192,7 +192,7 @@ class SocketIO: ...@@ -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: ...@@ -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: ...@@ -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:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment