def run(self): with self.server.counter: try: fileobj = self.channel.makefile('rw') try: value = self.delegate(Script(self.delegate, fileobj, self.client.transport, encoding=self.server.encoding)) if isinstance(value, threading.Thread): value.join() except: exc_info = sys.exc_info() exception_string = traceback.format_exc() try: fileobj.write( (u'\r\n' + u(exception_string).replace(u'\n', u'\r\n')).encode(self.server.encoding) ) except: pass reraise(exc_info) except: self.server.exceptions.put_nowait(sys.exc_info()) finally: try: self.channel.close() except EOFError: logger.debug('Channel already closed')
def stop(self): """ Stop the server, waiting for the runloop to exit. """ logging.info('stopping') self.socket.close() if self.is_alive(): self.join() if not self.exceptions.empty(): reraise(self.exceptions.get())