Fix wrong keep alive delay calculation.

This commit is contained in:
Christian Kratky
2020-05-16 10:32:50 +02:00
parent 763f0e7934
commit 08c9ecb011
2 changed files with 8 additions and 4 deletions
+3 -3
View File
@@ -25,7 +25,7 @@ namespace MQTTnet.Adapter
readonly byte[] _fixedHeaderBuffer = new byte[2]; readonly byte[] _fixedHeaderBuffer = new byte[2];
SemaphoreSlim _writerSemaphore = new SemaphoreSlim(1, 1); readonly SemaphoreSlim _writerSemaphore = new SemaphoreSlim(1, 1);
long _bytesReceived; long _bytesReceived;
long _bytesSent; long _bytesSent;
@@ -111,6 +111,8 @@ namespace MQTTnet.Adapter
public async Task SendPacketAsync(MqttBasePacket packet, TimeSpan timeout, CancellationToken cancellationToken) public async Task SendPacketAsync(MqttBasePacket packet, TimeSpan timeout, CancellationToken cancellationToken)
{ {
ThrowIfDisposed();
await _writerSemaphore.WaitAsync(cancellationToken).ConfigureAwait(false); await _writerSemaphore.WaitAsync(cancellationToken).ConfigureAwait(false);
try try
{ {
@@ -211,9 +213,7 @@ namespace MQTTnet.Adapter
if (disposing) if (disposing)
{ {
_channel?.Dispose(); _channel?.Dispose();
_writerSemaphore?.Dispose(); _writerSemaphore?.Dispose();
_writerSemaphore = null;
} }
base.Dispose(disposing); base.Dispose(disposing);
+5 -1
View File
@@ -446,7 +446,11 @@ namespace MQTTnet.Client
await SendAndReceiveAsync<MqttPingRespPacket>(new MqttPingReqPacket(), cancellationToken).ConfigureAwait(false); await SendAndReceiveAsync<MqttPingRespPacket>(new MqttPingReqPacket(), cancellationToken).ConfigureAwait(false);
} }
await Task.Delay(keepAlivePeriod, cancellationToken).ConfigureAwait(false); // Wait a fixed time in all cases. Calculation of the remaining time is complicated
// due to some edge cases and was buggy in the past. Now we wait half a second because the
// min keep alive value is one second so that the server will wait 1.5 seconds for a PING
// packet.
await Task.Delay(TimeSpan.FromMilliseconds(100), cancellationToken).ConfigureAwait(false);
} }
} }
catch (Exception exception) catch (Exception exception)