Skip to content

Commit 9e5c6ef

Browse files
authored
Merge pull request jupyter#4522 from meeseeksmachine/auto-backport-of-pr-4513-on-5.7.x
Backport PR jupyter#4513 on branch 5.7.x (Fix regressions in 5.7.x)
2 parents deb4d4a + fd8586c commit 9e5c6ef

File tree

3 files changed

+28
-4
lines changed

3 files changed

+28
-4
lines changed

docs/source/changelog.rst

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,17 @@ We strongly recommend that you upgrade pip to version 9+ of pip before upgrading
2121
Use ``pip install pip --upgrade`` to upgrade pip. Check pip version with
2222
``pip --version``.
2323

24+
.. _release-5.7.7:
25+
26+
5.7.7
27+
-----
28+
29+
- Fix regression in restarting kernels in 5.7.5.
30+
The restart handler would return before restart was completed.
31+
- Further improve compatibility with tornado 6 with improved
32+
checks for when websockets are closed.
33+
- Fix regression in 5.7.6 on Windows where .js files could have the wrong mime-type.
34+
2435
.. _release-5.7.6:
2536

2637
5.7.6

notebook/base/zmqhandlers.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@
1717

1818
import tornado
1919
from tornado import gen, ioloop, web
20-
from tornado.websocket import WebSocketHandler
20+
from tornado.iostream import StreamClosedError
21+
from tornado.websocket import WebSocketHandler, WebSocketClosedError
2122

2223
from jupyter_client.session import Session
2324
from jupyter_client.jsonutil import date_default, extract_dates
@@ -185,8 +186,13 @@ def send_ping(self):
185186
self.log.warning("WebSocket ping timeout after %i ms.", since_last_pong)
186187
self.close()
187188
return
189+
try:
190+
self.ping(b'')
191+
except (StreamClosedError, WebSocketClosedError):
192+
# websocket has been closed, stop pinging
193+
self.ping_callback.stop()
194+
return
188195

189-
self.ping(b'')
190196
self.last_ping = now
191197

192198
def on_pong(self, data):
@@ -246,8 +252,14 @@ def _on_zmq_reply(self, stream, msg_list):
246252
msg = self._reserialize_reply(msg_list, channel=channel)
247253
except Exception:
248254
self.log.critical("Malformed message: %r" % msg_list, exc_info=True)
249-
else:
255+
return
256+
257+
try:
250258
self.write_message(msg, binary=isinstance(msg, bytes))
259+
except (StreamClosedError, WebSocketClosedError):
260+
self.log.warning("zmq message arrived on closed channel")
261+
self.close()
262+
return
251263

252264

253265
class AuthenticatedZMQStreamHandler(ZMQStreamHandler, IPythonHandler):

notebook/services/kernels/kernelmanager.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,8 @@ def on_restart_failed():
320320
channel.on_recv(on_reply)
321321
loop = IOLoop.current()
322322
timeout = loop.add_timeout(loop.time() + self.kernel_info_timeout, on_timeout)
323-
raise gen.Return(future)
323+
# wait for restart to complete
324+
yield future
324325

325326
def notify_connect(self, kernel_id):
326327
"""Notice a new connection to a kernel"""

0 commit comments

Comments
 (0)