Only set _cleanDisconnectInitiated if no disconnect is pending

This commit is contained in:
Tobias Frick
2020-12-21 13:26:59 +01:00
parent b95d6b08bc
commit 91c8a15f65
+10 -10
View File
@@ -142,14 +142,17 @@ namespace MQTTnet.Client
ThrowIfDisposed();
var disconnectIsPending = DisconnectIsPending();
if (DisconnectIsPending())
{
return;
}
try
{
_disconnectReason = MqttClientDisconnectReason.NormalDisconnection;
_cleanDisconnectInitiated = true;
if (!disconnectIsPending && _isConnected)
if (_isConnected)
{
var disconnectPacket = _adapter.PacketFormatterAdapter.DataConverter.CreateDisconnectPacket(options);
await SendAsync(disconnectPacket, cancellationToken).ConfigureAwait(false);
@@ -157,10 +160,7 @@ namespace MQTTnet.Client
}
finally
{
if (!disconnectIsPending)
{
await DisconnectInternalAsync(null, null, null).ConfigureAwait(false);
}
await DisconnectInternalAsync(null, null, null).ConfigureAwait(false);
}
}
@@ -225,7 +225,7 @@ namespace MQTTnet.Client
ThrowIfDisposed();
ThrowIfNotConnected();
var publishPacket = _adapter.PacketFormatterAdapter.DataConverter.CreatePublishPacket(applicationMessage);
switch (applicationMessage.QualityOfServiceLevel)
@@ -312,7 +312,7 @@ namespace MQTTnet.Client
async Task DisconnectInternalAsync(Task sender, Exception exception, MqttClientAuthenticateResult authenticateResult)
{
var clientWasConnected = _isConnected;
TryInitiateDisconnect();
_isConnected = false;
@@ -572,7 +572,7 @@ namespace MQTTnet.Client
if (!DisconnectIsPending())
{
await DisconnectInternalAsync(_packetReceiverTask, null, null);
await DisconnectInternalAsync(_packetReceiverTask, null, null).ConfigureAwait(false);
}
}
else if (packet is MqttAuthPacket authPacket)
@@ -634,7 +634,7 @@ namespace MQTTnet.Client
{
try
{
var publishPacketDequeueResult = await _publishPacketReceiverQueue.TryDequeueAsync(cancellationToken);
var publishPacketDequeueResult = await _publishPacketReceiverQueue.TryDequeueAsync(cancellationToken).ConfigureAwait(false);
if (!publishPacketDequeueResult.IsSuccess)
{
return;