Fixed IOStream._handle_events (try/except block)

Fixed IOStream._handle_events (try/except block) to prevent
infinite loop when an unhandled exception occurs
This commit is contained in:
Imre SZEBENYI 2010-10-27 13:34:47 +02:00
parent af3d0b3b03
commit 3b486fc4f8
1 changed files with 26 additions and 20 deletions

View File

@ -189,27 +189,33 @@ class IOStream(object):
if not self.socket: if not self.socket:
logging.warning("Got events for closed stream %d", fd) logging.warning("Got events for closed stream %d", fd)
return return
if events & self.io_loop.READ: try:
self._handle_read() if events & self.io_loop.READ:
if not self.socket: self._handle_read()
return if not self.socket:
if events & self.io_loop.WRITE: return
if self._connecting: if events & self.io_loop.WRITE:
self._handle_connect() if self._connecting:
self._handle_write() self._handle_connect()
if not self.socket: self._handle_write()
return if not self.socket:
if events & self.io_loop.ERROR: return
if events & self.io_loop.ERROR:
self.close()
return
state = self.io_loop.ERROR
if self._read_delimiter or self._read_bytes:
state |= self.io_loop.READ
if self._write_buffer:
state |= self.io_loop.WRITE
if state != self._state:
self._state = state
self.io_loop.update_handler(self.socket.fileno(), self._state)
except:
logging.error("Uncaught exception, closing connection.",
exc_info=True)
self.close() self.close()
return raise
state = self.io_loop.ERROR
if self._read_delimiter or self._read_bytes:
state |= self.io_loop.READ
if self._write_buffer:
state |= self.io_loop.WRITE
if state != self._state:
self._state = state
self.io_loop.update_handler(self.socket.fileno(), self._state)
def _run_callback(self, callback, *args, **kwargs): def _run_callback(self, callback, *args, **kwargs):
try: try: