Skip to content

Commit c9fe45a

Browse files
authored
Merge pull request #2161 from OPCFoundation/master371
Merge updated master371 branch in release/1.4.371
2 parents 0f5fc44 + a81a696 commit c9fe45a

File tree

3 files changed

+30
-7
lines changed

3 files changed

+30
-7
lines changed

Applications/ConsoleReferenceClient/Program.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ public static async Task Main(string[] args)
130130
};
131131

132132
// load the application configuration.
133-
var config = await application.LoadApplicationConfiguration(silent: false);
133+
var config = await application.LoadApplicationConfiguration(silent: false).ConfigureAwait(false);
134134

135135
// override logfile
136136
if (logFile != null)
@@ -189,7 +189,7 @@ public static async Task Main(string[] args)
189189
uaClient.UserIdentity = new UserIdentity(username, userpassword ?? string.Empty);
190190
}
191191

192-
bool connected = await uaClient.ConnectAsync(serverUrl.ToString(), false);
192+
bool connected = await uaClient.ConnectAsync(serverUrl.ToString(), false).ConfigureAwait(false);
193193
if (connected)
194194
{
195195
output.WriteLine("Connected! Ctrl-C to quit.");
@@ -229,7 +229,7 @@ public static async Task Main(string[] args)
229229

230230
if (jsonvalues && variableIds != null)
231231
{
232-
await samples.ReadAllValuesAsync(uaClient, variableIds);
232+
await samples.ReadAllValuesAsync(uaClient, variableIds).ConfigureAwait(false);
233233
}
234234

235235
if (subscribe)
@@ -262,7 +262,7 @@ await samples.SubscribeAllValuesAsync(uaClient,
262262
publishingInterval: 5000,
263263
queueSize: 10,
264264
lifetimeCount: 12,
265-
keepAliveCount: 2);
265+
keepAliveCount: 2).ConfigureAwait(false);
266266

267267
// Wait for DataChange notifications from MonitoredItems
268268
quit = quitEvent.WaitOne(timeout > 0 ? waitTime : Timeout.Infinite);

Applications/ConsoleReferenceClient/UAClient.cs

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -270,11 +270,27 @@ private void Client_ReconnectComplete(object sender, EventArgs e)
270270
// if session recovered, Session property is null
271271
if (m_reconnectHandler.Session != null)
272272
{
273-
m_session = m_reconnectHandler.Session as Session;
273+
// ensure only a new instance is disposed
274+
// after reactivate, the same session instance may be returned
275+
if (!Object.ReferenceEquals(m_session, m_reconnectHandler.Session))
276+
{
277+
m_output.WriteLine("--- RECONNECTED TO NEW SESSION --- {0}", m_reconnectHandler.Session.SessionId);
278+
var session = m_session;
279+
session.KeepAlive -= Session_KeepAlive;
280+
m_session = m_reconnectHandler.Session as Session;
281+
m_session.KeepAlive += Session_KeepAlive;
282+
Utils.SilentDispose(session);
283+
}
284+
else
285+
{
286+
m_output.WriteLine("--- REACTIVATED SESSION --- {0}", m_reconnectHandler.Session.SessionId);
287+
}
288+
}
289+
else
290+
{
291+
m_output.WriteLine("--- RECONNECT KeepAlive recovered ---");
274292
}
275293
}
276-
277-
m_output.WriteLine("--- RECONNECTED ---");
278294
}
279295
#endregion
280296

Libraries/Opc.Ua.Client/Session.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5766,10 +5766,17 @@ private bool BelowPublishRequestLimit(int requestCount)
57665766
/// <summary>
57675767
/// Returns the minimum number of active publish request that should be used.
57685768
/// </summary>
5769+
/// <remarks>
5770+
/// Returns 0 if there are no subscriptions.
5771+
/// </remarks>
57695772
private int GetMinPublishRequestCount()
57705773
{
57715774
lock (SyncRoot)
57725775
{
5776+
if (m_subscriptions.Count == 0)
5777+
{
5778+
return 0;
5779+
}
57735780
return Math.Max(m_subscriptions.Count, m_minPublishRequestCount);
57745781
}
57755782
}

0 commit comments

Comments
 (0)