def close(self): # TODO: provide stronger interrupt protection on cleanup. See PEP 419 if self.closing: return self.closing = True self.container.errors = [] try: if self.conn: self.conn.close() self.wait(lambda: not (self.conn.state & Endpoint.REMOTE_ACTIVE), msg="Closing connection") finally: self.conn.free() # Nothing left to block on. Allow reactor to clean up. self.run() self.conn = None self.container.global_handler = None # break circular ref: container to cadapter.on_error pn_collector_release(pn_reactor_collector(self.container._impl)) # straggling event may keep reactor alive self.container = None
def close(self): # TODO: provide stronger interrupt protection on cleanup. See PEP 419 if self.closing: return self.closing = True self.container.errors = [] try: if self.conn: self.conn.close() self.wait( lambda: not (self.conn.state & Endpoint.REMOTE_ACTIVE), msg="Closing connection") finally: self.conn.free() # Nothing left to block on. Allow reactor to clean up. self.run() self.conn = None self.container.global_handler = None # break circular ref: container to cadapter.on_error pn_collector_release(pn_reactor_collector(self.container._impl) ) # straggling event may keep reactor alive self.container = None
def release(self) -> None: pn_collector_release(self._impl)
def release(self): pn_collector_release(self._impl)