From d7298f6229fabe7734197b5b0e2aa1ac04417dc5 Mon Sep 17 00:00:00 2001 From: Florian Mounier Date: Fri, 16 May 2014 12:00:05 +0200 Subject: [PATCH] Fix infinite exception loop: KeyError Exception in callback None --- butterfly/routes.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/butterfly/routes.py b/butterfly/routes.py index 8e3e457..21d86b4 100644 --- a/butterfly/routes.py +++ b/butterfly/routes.py @@ -307,22 +307,29 @@ class TermWebSocket(Route, tornado.websocket.WebSocketHandler): read = '' self.log.info('READ>%r' % read) - if len(read) != 0 and self.ws_connection: + if read and len(read) != 0 and self.ws_connection: self.write_message(read.decode('utf-8', 'replace')) else: events = ioloop.ERROR if events & ioloop.ERROR: - self.log.info('Error on fd, closing') + self.log.info('Error on fd %d, closing' % fd) # Terminated self.on_close() self.close() def on_close(self): + self.log.info('Closing fd %d' % self.fd) + if getattr(self, 'pid', 0) == 0: self.log.info('pid is 0') return + try: + ioloop.remove_handler(self.fd) + except Exception: + self.log.error('handler removal fail', exc_info=True) + try: os.close(self.fd) except Exception: @@ -334,9 +341,4 @@ class TermWebSocket(Route, tornado.websocket.WebSocketHandler): except Exception: self.log.debug('waitpid fail', exc_info=True) - try: - ioloop.remove_handler(self.fd) - except Exception: - self.log.debug('handler removal fail', exc_info=True) - self.log.info('Websocket closed')