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:
|
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:
|
||||||
|
|
Loading…
Reference in New Issue