From 63723cd9e3dbdadaf74076beab93d57c4f2725c1 Mon Sep 17 00:00:00 2001 From: Arne Welzel Date: Thu, 24 Apr 2025 09:15:23 +0200 Subject: [PATCH] cluster/websocket: Raise websocket_client_lost() after terminate Just in case events are created during backend->Terminate(). These should come before the Cluster::websocket_client_lost() event. --- src/cluster/websocket/WebSocket.cc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/cluster/websocket/WebSocket.cc b/src/cluster/websocket/WebSocket.cc index c70fd1c728..1f2610a99b 100644 --- a/src/cluster/websocket/WebSocket.cc +++ b/src/cluster/websocket/WebSocket.cc @@ -342,11 +342,14 @@ void WebSocketEventDispatcher::Process(const WebSocketClose& close) { // If the client doesn't have a backend, it wasn't ever properly instantiated. if ( backend ) { + backend->Terminate(); + + // Raise Cluster::websocket_client_lost() after the backend has terminated. + // In case any messages/events were still pending, Cluster::websocket_client_lost() + // should be the last event related to this WebSocket client. auto rec = zeek::cluster::detail::bif::make_endpoint_info(backend->NodeId(), wsc->getRemoteIp(), wsc->getRemotePort(), TRANSPORT_TCP); zeek::event_mgr.Enqueue(Cluster::websocket_client_lost, std::move(rec)); - - backend->Terminate(); } clients.erase(it);