mirror of
https://github.com/jupyter/notebook.git
synced 2024-12-21 04:10:17 +08:00
Merge pull request #7768 from minrk/handle-close
handle zmq messages that may be processed after websocket is closed
This commit is contained in:
commit
69fe3a6d64
@ -94,11 +94,23 @@ if os.environ.get('IPYTHON_ALLOW_DRAFT_WEBSOCKETS_FOR_PHANTOMJS', False):
|
|||||||
|
|
||||||
class ZMQStreamHandler(WebSocketHandler):
|
class ZMQStreamHandler(WebSocketHandler):
|
||||||
|
|
||||||
|
if tornado.version_info < (4,1):
|
||||||
|
"""Backport send_error from tornado 4.1 to 4.0"""
|
||||||
|
def send_error(self, *args, **kwargs):
|
||||||
|
if self.stream is None:
|
||||||
|
super(WebSocketHandler, self).send_error(*args, **kwargs)
|
||||||
|
else:
|
||||||
|
# If we get an uncaught exception during the handshake,
|
||||||
|
# we have no choice but to abruptly close the connection.
|
||||||
|
# TODO: for uncaught exceptions after the handshake,
|
||||||
|
# we can close the connection more gracefully.
|
||||||
|
self.stream.close()
|
||||||
|
|
||||||
|
|
||||||
def check_origin(self, origin):
|
def check_origin(self, origin):
|
||||||
"""Check Origin == Host or Access-Control-Allow-Origin.
|
"""Check Origin == Host or Access-Control-Allow-Origin.
|
||||||
|
|
||||||
Tornado >= 4 calls this method automatically, raising 403 if it returns False.
|
Tornado >= 4 calls this method automatically, raising 403 if it returns False.
|
||||||
We call it explicitly in `open` on Tornado < 4.
|
|
||||||
"""
|
"""
|
||||||
if self.allow_origin == '*':
|
if self.allow_origin == '*':
|
||||||
return True
|
return True
|
||||||
@ -160,7 +172,10 @@ class ZMQStreamHandler(WebSocketHandler):
|
|||||||
def _on_zmq_reply(self, stream, msg_list):
|
def _on_zmq_reply(self, stream, msg_list):
|
||||||
# Sometimes this gets triggered when the on_close method is scheduled in the
|
# Sometimes this gets triggered when the on_close method is scheduled in the
|
||||||
# eventloop but hasn't been called.
|
# eventloop but hasn't been called.
|
||||||
if stream.closed(): return
|
if self.stream.closed() or stream.closed():
|
||||||
|
self.log.warn("zmq message arrived on closed channel")
|
||||||
|
self.close()
|
||||||
|
return
|
||||||
channel = getattr(stream, 'channel', None)
|
channel = getattr(stream, 'channel', None)
|
||||||
try:
|
try:
|
||||||
msg = self._reserialize_reply(msg_list, channel=channel)
|
msg = self._reserialize_reply(msg_list, channel=channel)
|
||||||
|
Loading…
Reference in New Issue
Block a user