From c39da42ef25d694183be7f55ebd007bc5823d9b5 Mon Sep 17 00:00:00 2001 From: SilverFox Date: Thu, 1 Apr 2021 22:00:01 +0800 Subject: [PATCH] Disallow to call MqttClient.ConnectAsync while Disconnect is pending. Fix #996 Fix #1010 --- Source/MQTTnet/Client/MqttClient.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Source/MQTTnet/Client/MqttClient.cs b/Source/MQTTnet/Client/MqttClient.cs index 638cf6b2..3268c697 100644 --- a/Source/MQTTnet/Client/MqttClient.cs +++ b/Source/MQTTnet/Client/MqttClient.cs @@ -71,6 +71,9 @@ namespace MQTTnet.Client ThrowIfDisposed(); + if (Volatile.Read(ref _isDisconnectPending) != 0) + throw new InvalidOperationException("Not allowed to connect while disconnect is pending."); + MqttClientAuthenticateResult authenticateResult = null; try @@ -83,7 +86,6 @@ namespace MQTTnet.Client _backgroundCancellationTokenSource = new CancellationTokenSource(); var backgroundCancellationToken = _backgroundCancellationTokenSource.Token; - _isDisconnectPending = 0; var adapter = _adapterFactory.CreateClientAdapter(options); _adapter = adapter; @@ -357,6 +359,7 @@ namespace MQTTnet.Client { Cleanup(); _cleanDisconnectInitiated = false; + Volatile.Write(ref _isDisconnectPending, 0); _logger.Info("Disconnected.");