Skip to content

Commit 2501c83

Browse files
fix: make page_close on close beacon thread safe
Since we check for, and get the kernel on two different lines, we can trigger a KeyError when the close beacon is handled. Calling .get on the dict will make this thread safe.
1 parent c8ca20f commit 2501c83

2 files changed

Lines changed: 4 additions & 4 deletions

File tree

‎solara/server/flask.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -162,8 +162,8 @@ def kernels_connection(ws: simple_websocket.Server, kernel_id: str, name: str):
162162
@blueprint.route("/_solara/api/close/<kernel_id>", methods=["GET", "POST"])
163163
def close(kernel_id: str):
164164
page_id = request.args["session_id"]
165-
if kernel_id in kernel_context.contexts:
166-
context = kernel_context.contexts[kernel_id]
165+
context = kernel_context.contexts.get(kernel_id, None)
166+
if context is not None:
167167
context.page_close(page_id)
168168
return ""
169169

‎solara/server/starlette.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -311,8 +311,8 @@ async def run_wrapper():
311311
def close(request: Request):
312312
kernel_id = request.path_params["kernel_id"]
313313
page_id = request.query_params["session_id"]
314-
if kernel_id in kernel_context.contexts:
315-
context = kernel_context.contexts[kernel_id]
314+
context = kernel_context.contexts.get(kernel_id, None)
315+
if context is not None:
316316
context.page_close(page_id)
317317
response = HTMLResponse(content="", status_code=200)
318318
return response

0 commit comments

Comments
 (0)