if oslo_rootwrap._patched_socket: # We have to use slow version of recvall with eventlet because of a bug in # GreenSocket.recv_into: # https://bitbucket.org/eventlet/eventlet/pull-request/41 # This check happens here instead of jsonrpc to avoid importing eventlet # from daemon code that is run with root privileges. jsonrpc.JsonConnection.recvall = jsonrpc.JsonConnection._recvall_slow try: finalize = weakref.finalize except AttributeError: def finalize(obj, func, *args, **kwargs): return mp_util.Finalize(obj, func, args=args, kwargs=kwargs, exitpriority=0) ClientManager = daemon.get_manager_class() LOG = logging.getLogger(__name__) class Client(object): def __init__(self, rootwrap_daemon_cmd): self._start_command = rootwrap_daemon_cmd self._initialized = False self._need_restart = False self._mutex = threading.Lock() self._manager = None self._proxy = None self._process = None self._finalize = None # This is for eventlet compatibility. multiprocessing stores # daemon connection in ForkAwareLocal, so this won't be
if patched_socket: # We have to use slow version of recvall with eventlet because of a bug in # GreenSocket.recv_into: # https://bitbucket.org/eventlet/eventlet/pull-request/41 # This check happens here instead of jsonrpc to avoid importing eventlet # from daemon code that is run with root priviledges. jsonrpc.JsonConnection.recvall = jsonrpc.JsonConnection._recvall_slow try: finalize = weakref.finalize except AttributeError: def finalize(obj, func, *args, **kwargs): return mp_util.Finalize(obj, func, args=args, kwargs=kwargs, exitpriority=0) ClientManager = daemon.get_manager_class() LOG = logging.getLogger(__name__) class Client(object): def __init__(self, rootwrap_daemon_cmd): self._start_command = rootwrap_daemon_cmd self._initialized = False self._mutex = threading.Lock() self._manager = None self._proxy = None self._process = None self._finalize = None def _initialize(self): if self._process is not None and self._process.poll() is not None: