mirror of
https://github.com/dotnet/MQTTnet.git
synced 2026-10-16 09:13:02 +08:00
corrected thread safety of ping timers after adding delayed acknowledgement
This commit is contained in:
@@ -25,8 +25,8 @@ namespace MQTTnet.Client
|
||||
{
|
||||
readonly MqttPacketIdentifierProvider _packetIdentifierProvider = new MqttPacketIdentifierProvider();
|
||||
readonly MqttPacketDispatcher _packetDispatcher = new MqttPacketDispatcher();
|
||||
readonly Stopwatch _sendTracker = new Stopwatch();
|
||||
readonly Stopwatch _receiveTracker = new Stopwatch();
|
||||
volatile int _lastSentAtTicks;
|
||||
volatile int _lastReceivedAtTicks;
|
||||
readonly object _disconnectLock = new object();
|
||||
|
||||
readonly IMqttClientAdapterFactory _adapterFactory;
|
||||
@@ -102,8 +102,8 @@ namespace MQTTnet.Client
|
||||
authenticateResult = await AuthenticateAsync(adapter, options.WillMessage, combined.Token).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
_sendTracker.Restart();
|
||||
_receiveTracker.Restart();
|
||||
_lastSentAtTicks = Environment.TickCount;
|
||||
_lastReceivedAtTicks = Environment.TickCount;
|
||||
|
||||
if (Options.KeepAlivePeriod != TimeSpan.Zero)
|
||||
{
|
||||
@@ -382,7 +382,7 @@ namespace MQTTnet.Client
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
|
||||
_sendTracker.Restart();
|
||||
_lastReceivedAtTicks = Environment.TickCount;
|
||||
|
||||
return _adapter.SendPacketAsync(packet, cancellationToken);
|
||||
}
|
||||
@@ -401,7 +401,7 @@ namespace MQTTnet.Client
|
||||
{
|
||||
try
|
||||
{
|
||||
_sendTracker.Restart();
|
||||
_lastSentAtTicks = Environment.TickCount;
|
||||
await _adapter.SendPacketAsync(requestPacket, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
catch (Exception e)
|
||||
@@ -437,7 +437,7 @@ namespace MQTTnet.Client
|
||||
while (!cancellationToken.IsCancellationRequested)
|
||||
{
|
||||
// Values described here: [MQTT-3.1.2-24].
|
||||
var waitTime = keepAlivePeriod - _sendTracker.Elapsed;
|
||||
var waitTime = keepAlivePeriod - TimeSpan.FromMilliseconds(unchecked(Environment.TickCount - _lastSentAtTicks));
|
||||
|
||||
if (waitTime <= TimeSpan.Zero)
|
||||
{
|
||||
@@ -546,7 +546,7 @@ namespace MQTTnet.Client
|
||||
{
|
||||
try
|
||||
{
|
||||
_receiveTracker.Restart();
|
||||
_lastReceivedAtTicks = Environment.TickCount;
|
||||
|
||||
if (packet is MqttPublishPacket publishPacket)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user