diff --git a/src/cluster/websocket/WebSocket.cc b/src/cluster/websocket/WebSocket.cc index 4611e852d4..8b3569b6bf 100644 --- a/src/cluster/websocket/WebSocket.cc +++ b/src/cluster/websocket/WebSocket.cc @@ -249,6 +249,11 @@ void WebSocketEventDispatcher::Terminate() { clients.clear(); onloop->Close(); + + // Wait for the reply_msg_thread to process any outstanding + // WebSocketReply messages before returning. + reply_msg_thread->SignalStop(); + reply_msg_thread->WaitForStop(); } void WebSocketEventDispatcher::QueueForProcessing(WebSocketEvent&& event) { diff --git a/testing/btest/cluster/websocket/terminate-while-queuing.zeek b/testing/btest/cluster/websocket/terminate-while-queuing.zeek index 530f5d1ecf..59120eec56 100644 --- a/testing/btest/cluster/websocket/terminate-while-queuing.zeek +++ b/testing/btest/cluster/websocket/terminate-while-queuing.zeek @@ -89,7 +89,7 @@ def run(ws_url): tc.send_json(wstest.build_event_v1("/test/pings/", "ping", [f"tc{idx}", i])) except websockets.exceptions.ConnectionClosedOK as e: print("connection closed ok") - assert e.code == 1001 # Remote going away + assert e.code == 1001, f"expected code 1001, got {e.code} - {e}" # Remote going away i -= 1 saw_closed_ok.add(idx)