Skip to content

Commit caa7175

Browse files
authored
1742 some bug in mqttclientconnectionvalidatorhandle (#1746)
1 parent 66b77f8 commit caa7175

File tree

3 files changed

+18
-22
lines changed

3 files changed

+18
-22
lines changed

.github/workflows/ReleaseNotes.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@
88
* [Client] Exposed more TLS options (#1729).
99
* [Client] Fixed wrong return code conversion (#1729).
1010
* [Server] Improved performance by changing internal locking strategy for subscriptions (#1716, thanks to @zeheng).
11+
* [Server] Fixed exceptions when clients are connecting and disconnecting very fast while accessing the client status for connection validation (#1742).
1112
* [Server] Exposed more properties in _ClientConnectedEventArgs_ (#1738).

Source/MQTTnet/Server/Internal/MqttClientSessionsManager.cs

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public MqttClientSessionsManager(
5858
_eventContainer = eventContainer ?? throw new ArgumentNullException(nameof(eventContainer));
5959
}
6060

61-
public async Task CloseAllConnectionsAsync()
61+
public async Task CloseAllConnections()
6262
{
6363
List<MqttClient> connections;
6464
lock (_clients)
@@ -306,17 +306,17 @@ public List<MqttClient> GetClients()
306306
}
307307
}
308308

309-
public Task<IList<MqttClientStatus>> GetClientStatusesAsync()
309+
public Task<IList<MqttClientStatus>> GetClientsStatus()
310310
{
311311
var result = new List<MqttClientStatus>();
312312

313313
lock (_clients)
314314
{
315-
foreach (var connection in _clients.Values)
315+
foreach (var client in _clients.Values)
316316
{
317-
var clientStatus = new MqttClientStatus(connection)
317+
var clientStatus = new MqttClientStatus(client)
318318
{
319-
Session = new MqttSessionStatus(connection.Session)
319+
Session = new MqttSessionStatus(client.Session)
320320
};
321321

322322
result.Add(clientStatus);
@@ -326,7 +326,7 @@ public Task<IList<MqttClientStatus>> GetClientStatusesAsync()
326326
return Task.FromResult((IList<MqttClientStatus>)result);
327327
}
328328

329-
public Task<IList<MqttSessionStatus>> GetSessionStatusAsync()
329+
public Task<IList<MqttSessionStatus>> GetSessionsStatus()
330330
{
331331
var result = new List<MqttSessionStatus>();
332332

@@ -614,20 +614,15 @@ async Task<MqttClient> CreateClientConnection(
614614
// Create a new client (always required).
615615
lock (_clients)
616616
{
617-
_clients.TryGetValue(connectPacket.ClientId, out oldClient);
618-
}
619-
620-
if (oldClient != null)
621-
{
622-
// This will stop the current client from sending and receiving but remains the connection active
623-
// for a later DISCONNECT packet.
624-
oldClient.IsTakenOver = true;
625-
}
626-
627-
client = CreateClient(connectPacket, channelAdapter, session);
617+
_clients.TryGetValue(connectPacket.ClientId, out oldClient);
618+
if (oldClient != null)
619+
{
620+
// This will stop the current client from sending and receiving but remains the connection active
621+
// for a later DISCONNECT packet.
622+
oldClient.IsTakenOver = true;
623+
}
628624

629-
lock (_clients)
630-
{
625+
client = CreateClient(connectPacket, channelAdapter, session);
631626
_clients[connectPacket.ClientId] = client;
632627
}
633628
}

Source/MQTTnet/Server/MqttServer.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ public Task<IList<MqttClientStatus>> GetClientsAsync()
200200
{
201201
ThrowIfNotStarted();
202202

203-
return _clientSessionsManager.GetClientStatusesAsync();
203+
return _clientSessionsManager.GetClientsStatus();
204204
}
205205

206206
public Task<IList<MqttApplicationMessage>> GetRetainedMessagesAsync()
@@ -226,7 +226,7 @@ public Task<IList<MqttSessionStatus>> GetSessionsAsync()
226226
{
227227
ThrowIfNotStarted();
228228

229-
return _clientSessionsManager.GetSessionStatusAsync();
229+
return _clientSessionsManager.GetSessionsStatus();
230230
}
231231

232232
public Task InjectApplicationMessage(InjectedMqttApplicationMessage injectedApplicationMessage, CancellationToken cancellationToken = default)
@@ -292,7 +292,7 @@ public async Task StopAsync()
292292

293293
_cancellationTokenSource.Cancel(false);
294294

295-
await _clientSessionsManager.CloseAllConnectionsAsync().ConfigureAwait(false);
295+
await _clientSessionsManager.CloseAllConnections().ConfigureAwait(false);
296296

297297
foreach (var adapter in _adapters)
298298
{

0 commit comments

Comments
 (0)