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
This commit is contained in:
Kurt B. Kaiser 2002-08-25 14:08:07 +00:00
parent a552e3a0c9
commit adc63847e4
3 changed files with 17 additions and 39 deletions

View file

@ -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

View file

@ -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):
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):
"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):
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

View file

@ -1,7 +1,6 @@
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:
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