From 4965ba55e1bc31f8aa253491aa5dfdc0eda47a37 Mon Sep 17 00:00:00 2001 From: Jaka Mohorko Date: Fri, 27 Mar 2026 14:13:37 +0100 Subject: [PATCH 1/2] Make server cleanup more robust --- .../websocket_streaming_server_impl.h | 1 + .../src/websocket_streaming_server_impl.cpp | 5 +++++ .../include/websocket_streaming/streaming_server.h | 2 ++ .../websocket_streaming_server.h | 1 + .../websocket_streaming/src/streaming_server.cpp | 11 +++++++++++ .../src/websocket_streaming_server.cpp | 13 +++++++++++-- 6 files changed, 31 insertions(+), 2 deletions(-) diff --git a/modules/websocket_streaming_server_module/include/websocket_streaming_server_module/websocket_streaming_server_impl.h b/modules/websocket_streaming_server_module/include/websocket_streaming_server_module/websocket_streaming_server_impl.h index 8e11392..c525f4e 100644 --- a/modules/websocket_streaming_server_module/include/websocket_streaming_server_module/websocket_streaming_server_impl.h +++ b/modules/websocket_streaming_server_module/include/websocket_streaming_server_module/websocket_streaming_server_impl.h @@ -30,6 +30,7 @@ class WebsocketStreamingServerImpl : public Server explicit WebsocketStreamingServerImpl(const DevicePtr& rootDevice, const PropertyObjectPtr& config, const ContextPtr& context); + ~WebsocketStreamingServerImpl() override; static PropertyObjectPtr createDefaultConfig(const ContextPtr& context); static ServerTypePtr createType(const ContextPtr& context); static PropertyObjectPtr populateDefaultConfig(const PropertyObjectPtr& config, const ContextPtr& context); diff --git a/modules/websocket_streaming_server_module/src/websocket_streaming_server_impl.cpp b/modules/websocket_streaming_server_module/src/websocket_streaming_server_impl.cpp index 0371574..3202cc2 100644 --- a/modules/websocket_streaming_server_module/src/websocket_streaming_server_impl.cpp +++ b/modules/websocket_streaming_server_module/src/websocket_streaming_server_impl.cpp @@ -23,6 +23,11 @@ WebsocketStreamingServerImpl::WebsocketStreamingServerImpl(const DevicePtr& root websocketStreamingServer.start(); } +WebsocketStreamingServerImpl::~WebsocketStreamingServerImpl() +{ + websocketStreamingServer.stop(); +} + void WebsocketStreamingServerImpl::populateDefaultConfigFromProvider(const ContextPtr& context, const PropertyObjectPtr& config) { if (!context.assigned()) diff --git a/shared/libraries/websocket_streaming/include/websocket_streaming/streaming_server.h b/shared/libraries/websocket_streaming/include/websocket_streaming/streaming_server.h index e83ea9e..12efac8 100644 --- a/shared/libraries/websocket_streaming/include/websocket_streaming/streaming_server.h +++ b/shared/libraries/websocket_streaming/include/websocket_streaming/streaming_server.h @@ -52,7 +52,9 @@ class StreamingServer void start(uint16_t port = daq::streaming_protocol::WEBSOCKET_LISTENING_PORT, uint16_t controlPort = daq::streaming_protocol::HTTP_CONTROL_PORT); + void stop(); + void clearCallbacks(); void onAccept(const OnAcceptCallback& callback); void onStartSignalsRead(const OnStartSignalsReadCallback& callback); diff --git a/shared/libraries/websocket_streaming/include/websocket_streaming/websocket_streaming_server.h b/shared/libraries/websocket_streaming/include/websocket_streaming/websocket_streaming_server.h index ae04828..0423b8c 100644 --- a/shared/libraries/websocket_streaming/include/websocket_streaming/websocket_streaming_server.h +++ b/shared/libraries/websocket_streaming/include/websocket_streaming/websocket_streaming_server.h @@ -43,6 +43,7 @@ class WebsocketStreamingServer DevicePtr device; ContextPtr context; + bool stopped = false; uint16_t streamingPort = 0; uint16_t controlPort = 0; daq::websocket_streaming::StreamingServer streamingServer; diff --git a/shared/libraries/websocket_streaming/src/streaming_server.cpp b/shared/libraries/websocket_streaming/src/streaming_server.cpp index 4aa815c..792aa7a 100644 --- a/shared/libraries/websocket_streaming/src/streaming_server.cpp +++ b/shared/libraries/websocket_streaming/src/streaming_server.cpp @@ -104,6 +104,17 @@ void StreamingServer::stop() this->server.reset(); this->controlServer.reset(); + + clearCallbacks(); +} + +void StreamingServer::clearCallbacks() +{ + onAcceptCallback = nullptr; + onStartSignalsReadCallback = nullptr; + onStopSignalsReadCallback = nullptr; + clientConnectedHandler = nullptr; + clientDisconnectedHandler = nullptr; } void StreamingServer::onAccept(const OnAcceptCallback& callback) diff --git a/shared/libraries/websocket_streaming/src/websocket_streaming_server.cpp b/shared/libraries/websocket_streaming/src/websocket_streaming_server.cpp index 91f7fa5..48b7e22 100644 --- a/shared/libraries/websocket_streaming/src/websocket_streaming_server.cpp +++ b/shared/libraries/websocket_streaming/src/websocket_streaming_server.cpp @@ -13,7 +13,6 @@ BEGIN_NAMESPACE_OPENDAQ_WEBSOCKET_STREAMING WebsocketStreamingServer::~WebsocketStreamingServer() { - this->context.getOnCoreEvent() -= event(this, &WebsocketStreamingServer::coreEventCallback); stopInternal(); } @@ -104,7 +103,10 @@ void WebsocketStreamingServer::start() } void WebsocketStreamingServer::stop() -{ +{ + if (stopped) + return; + if (device.assigned() && !device.isRemoved()) { const auto info = this->device.getInfo(); @@ -124,8 +126,15 @@ void WebsocketStreamingServer::stop() void WebsocketStreamingServer::stopInternal() { + if (stopped) + return; + + this->context.getOnCoreEvent() -= event(this, &WebsocketStreamingServer::coreEventCallback); + packetReader.stop(); streamingServer.stop(); + + stopped = true; } void WebsocketStreamingServer::coreEventCallback(ComponentPtr& sender, CoreEventArgsPtr& eventArgs) From 74f978a0e1dfaefd100c9eb78fb08ceeb38de148 Mon Sep 17 00:00:00 2001 From: Jaka Mohorko Date: Fri, 27 Mar 2026 14:17:39 +0100 Subject: [PATCH 2/2] Update openDAQ ref --- opendaq_ref | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opendaq_ref b/opendaq_ref index d0a6910..f95613f 100644 --- a/opendaq_ref +++ b/opendaq_ref @@ -1 +1 @@ -4757349a1db30721bead0cb695ec3a147913aef4 +05d65e97c9d6f0cea5c23c423855a65426c30baf