Commit adc63847 authored by Kurt B. Kaiser's avatar Kurt B. Kaiser

1. Revert subprocess environment clearing, will restart subprocess

   instead.
2. Preserve the Idle client's listening socket for reuse with the
   fresh subprocess.
3. Remove some unused rpc code, comment out additional unused code.

Modified Files:
ScriptBinding.py rpc.py run.py
parent a552e3a0
...@@ -147,8 +147,6 @@ class ScriptBinding: ...@@ -147,8 +147,6 @@ class ScriptBinding:
flist = self.editwin.flist flist = self.editwin.flist
shell = flist.open_shell() shell = flist.open_shell()
interp = shell.interp interp = shell.interp
# clear the subprocess environment before every Run/F5 invocation
interp.rpcclt.remotecall("exec", "clear_the_environment", (), {})
# XXX Too often this discards arguments the user just set... # XXX Too often this discards arguments the user just set...
interp.runcommand("""if 1: interp.runcommand("""if 1:
_filename = %s _filename = %s
......
...@@ -49,15 +49,16 @@ def pickle_code(co): ...@@ -49,15 +49,16 @@ def pickle_code(co):
ms = marshal.dumps(co) ms = marshal.dumps(co)
return unpickle_code, (ms,) return unpickle_code, (ms,)
def unpickle_function(ms): # XXX KBK 24Aug02 function pickling capability not used in Idle
return ms # def unpickle_function(ms):
# return ms
def pickle_function(fn): # def pickle_function(fn):
assert isinstance(fn, type.FunctionType) # assert isinstance(fn, type.FunctionType)
return `fn` # return `fn`
copy_reg.pickle(types.CodeType, pickle_code, unpickle_code) copy_reg.pickle(types.CodeType, pickle_code, unpickle_code)
copy_reg.pickle(types.FunctionType, pickle_function, unpickle_function) # copy_reg.pickle(types.FunctionType, pickle_function, unpickle_function)
BUFSIZE = 8*1024 BUFSIZE = 8*1024
...@@ -66,8 +67,6 @@ class RPCServer(SocketServer.TCPServer): ...@@ -66,8 +67,6 @@ class RPCServer(SocketServer.TCPServer):
def __init__(self, addr, handlerclass=None): def __init__(self, addr, handlerclass=None):
if handlerclass is None: if handlerclass is None:
handlerclass = RPCHandler handlerclass = RPCHandler
# XXX KBK 25Jun02 Not used in Idlefork.
# self.objtable = objecttable
SocketServer.TCPServer.__init__(self, addr, handlerclass) SocketServer.TCPServer.__init__(self, addr, handlerclass)
def server_bind(self): def server_bind(self):
...@@ -87,18 +86,6 @@ class RPCServer(SocketServer.TCPServer): ...@@ -87,18 +86,6 @@ class RPCServer(SocketServer.TCPServer):
"Override TCPServer method, return already connected socket" "Override TCPServer method, return already connected socket"
return self.socket, self.server_address return self.socket, self.server_address
# XXX The following two methods are not currently used in Idlefork.
# def register(self, oid, object):
# self.objtable[oid] = object
# def unregister(self, oid):
# try:
# del self.objtable[oid]
# except KeyError:
# pass
objecttable = {} objecttable = {}
class SocketIO: class SocketIO:
...@@ -405,16 +392,17 @@ class RPCClient(SocketIO): ...@@ -405,16 +392,17 @@ class RPCClient(SocketIO):
nextseq = 1 # Requests coming from the client are odd numbered nextseq = 1 # Requests coming from the client are odd numbered
def __init__(self, address, family=socket.AF_INET, type=socket.SOCK_STREAM): def __init__(self, address, family=socket.AF_INET, type=socket.SOCK_STREAM):
self.sock = socket.socket(family, type) self.listening_sock = socket.socket(family, type)
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.listening_sock.setsockopt(socket.SOL_SOCKET,
self.sock.bind(address) socket.SO_REUSEADDR, 1)
self.sock.listen(1) self.listening_sock.bind(address)
self.listening_sock.listen(1)
def accept(self): def accept(self):
newsock, address = self.sock.accept() working_sock, address = self.listening_sock.accept()
if address[0] == '127.0.0.1': if address[0] == '127.0.0.1':
print>>sys.__stderr__, "Idle accepted connection from ", address print>>sys.__stderr__, "Idle accepted connection from ", address
SocketIO.__init__(self, newsock) SocketIO.__init__(self, working_sock)
else: else:
print>>sys.__stderr__, "Invalid host: ", address print>>sys.__stderr__, "Invalid host: ", address
raise socket.error raise socket.error
......
import sys import sys
import time import time
import socket import socket
import __main__
import rpc import rpc
def main(): def main():
...@@ -56,18 +55,11 @@ class Executive: ...@@ -56,18 +55,11 @@ class Executive:
def __init__(self, rpchandler): def __init__(self, rpchandler):
self.rpchandler = rpchandler self.rpchandler = rpchandler
self.base_env_keys = __main__.__dict__.keys() import __main__
self.locals = __main__.__dict__
def runcode(self, code): def runcode(self, code):
exec code in __main__.__dict__ exec code in self.locals
def clear_the_environment(self):
global __main__
env = __main__.__dict__
for key in env.keys():
if key not in self.base_env_keys:
del env[key]
env['__doc__'] = None
def start_the_debugger(self, gui_adap_oid): def start_the_debugger(self, gui_adap_oid):
import RemoteDebugger import RemoteDebugger
......
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