diff --git a/CHANGES b/CHANGES index a107c5977e..6a8d396a87 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,9 @@ +7.2.0-rc1.11 | 2025-05-07 14:06:06 +0200 + + * cluster/websocket: Stop and wait for reply thread during Terminate() (Arne Welzel, Corelight) + + (cherry picked from commit 135acc7c6d2cd150b9090ca7563519ffadc2148e) + 7.2.0-rc1.10 | 2025-05-07 11:10:09 +0200 * Websocket: Close onloop during Terminate() (Arne Welzel, Corelight) diff --git a/VERSION b/VERSION index f2ac5127b0..d9fec82f98 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -7.2.0-rc1.10 +7.2.0-rc1.11 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)