From 1baf420168985f52dfcb1bfc8d9db561bf35aacc Mon Sep 17 00:00:00 2001 From: romanett Date: Tue, 11 Feb 2025 13:23:56 +0100 Subject: [PATCH] [Server] Fix Sampling Group creating a new long running task for every Client AddMonitoredItems Method Call (#2984) * fix Sampling Group creating a new long running task for every Client Add MonitoredItems Method Call * reset also on shutdown * dispose shutdown event --- Libraries/Opc.Ua.Server/NodeManager/SamplingGroup.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Libraries/Opc.Ua.Server/NodeManager/SamplingGroup.cs b/Libraries/Opc.Ua.Server/NodeManager/SamplingGroup.cs index fddabbf38c..5afb8ececf 100644 --- a/Libraries/Opc.Ua.Server/NodeManager/SamplingGroup.cs +++ b/Libraries/Opc.Ua.Server/NodeManager/SamplingGroup.cs @@ -106,7 +106,7 @@ namespace Opc.Ua.Server { m_shutdownEvent.Reset(); - Task.Factory.StartNew(() => { + m_samplingTask = Task.Factory.StartNew(() => { SampleMonitoredItems(m_samplingInterval); }, TaskCreationOptions.LongRunning | TaskCreationOptions.DenyChildAttach); } @@ -121,6 +121,9 @@ namespace Opc.Ua.Server { m_shutdownEvent.Set(); m_items.Clear(); + Utils.SilentDispose(m_samplingTask); + m_samplingTask = null; + Utils.SilentDispose(m_shutdownEvent); } } @@ -243,7 +246,7 @@ namespace Opc.Ua.Server m_itemsToRemove.Clear(); // start the group if it is not running. - if (m_items.Count > 0) + if (m_samplingTask == null && m_items.Count > 0) { Startup(); } @@ -487,6 +490,7 @@ namespace Opc.Ua.Server private Dictionary m_items; private ManualResetEvent m_shutdownEvent; private List m_samplingRates; + private Task m_samplingTask; #endregion } }