From 9c7b321ecb609537c95391f6deddf1ad9d1317c2 Mon Sep 17 00:00:00 2001 From: Filippo-Oliva-ABB Date: Thu, 10 Oct 2024 19:56:28 +0200 Subject: [PATCH] #2656 Fix for - Session is not provided by ClearChangeMasks when a change is notified (#2772) It fixes #2656 by including in the SystemContext (taken as an argument to the OnMonitoredNodeChanged method) the Server session related to the current MonitoredItem that is going to be passed to the QueueValue. --- .../Diagnostics/MonitoredNode.cs | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/Libraries/Opc.Ua.Server/Diagnostics/MonitoredNode.cs b/Libraries/Opc.Ua.Server/Diagnostics/MonitoredNode.cs index 640052e78a..8f5414a9e6 100644 --- a/Libraries/Opc.Ua.Server/Diagnostics/MonitoredNode.cs +++ b/Libraries/Opc.Ua.Server/Diagnostics/MonitoredNode.cs @@ -294,13 +294,31 @@ namespace Opc.Ua.Server if (monitoredItem.AttributeId == Attributes.Value && (changes & NodeStateChangeMasks.Value) != 0) { - QueueValue(context, node, monitoredItem); + ServerSystemContext serverSystemContext; + if ((serverSystemContext = (context as ServerSystemContext)) != null) + { + ServerSystemContext context2 = serverSystemContext.Copy(new OperationContext(monitoredItem.Session, monitoredItem.DiagnosticsMasks)); + QueueValue(context2, node, monitoredItem); + } + else + { + QueueValue(context, node, monitoredItem); + } continue; } if (monitoredItem.AttributeId != Attributes.Value && (changes & NodeStateChangeMasks.NonValue) != 0) { - QueueValue(context, node, monitoredItem); + ServerSystemContext serverSystemContext2; + if ((serverSystemContext2 = (context as ServerSystemContext)) != null) + { + ServerSystemContext context3 = serverSystemContext2.Copy(new OperationContext(monitoredItem.Session, monitoredItem.DiagnosticsMasks)); + QueueValue(context3, node, monitoredItem); + } + else + { + QueueValue(context, node, monitoredItem); + } continue; } }