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:
parent
af3d0b3b03
commit
3b486fc4f8
|
@ -189,27 +189,33 @@ class IOStream(object):
|
|||
if not self.socket:
|
||||
logging.warning("Got events for closed stream %d", fd)
|
||||
return
|
||||
if events & self.io_loop.READ:
|
||||
self._handle_read()
|
||||
if not self.socket:
|
||||
return
|
||||
if events & self.io_loop.WRITE:
|
||||
if self._connecting:
|
||||
self._handle_connect()
|
||||
self._handle_write()
|
||||
if not self.socket:
|
||||
return
|
||||
if events & self.io_loop.ERROR:
|
||||
try:
|
||||
if events & self.io_loop.READ:
|
||||
self._handle_read()
|
||||
if not self.socket:
|
||||
return
|
||||
if events & self.io_loop.WRITE:
|
||||
if self._connecting:
|
||||
self._handle_connect()
|
||||
self._handle_write()
|
||||
if not self.socket:
|
||||
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()
|
||||
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)
|
||||
raise
|
||||
|
||||
def _run_callback(self, callback, *args, **kwargs):
|
||||
try:
|
||||
|
|
Loading…
Reference in New Issue