diff --git a/Source/MQTTnet.Server/Internal/MqttRetainedMessagesManager.cs b/Source/MQTTnet.Server/Internal/MqttRetainedMessagesManager.cs index 41dacb9b7..83e8c796b 100644 --- a/Source/MQTTnet.Server/Internal/MqttRetainedMessagesManager.cs +++ b/Source/MQTTnet.Server/Internal/MqttRetainedMessagesManager.cs @@ -61,6 +61,9 @@ public async Task UpdateMessage(string clientId, MqttApplicationMessage applicat lock (_messages) { + List messagesForSave = null; + var saveIsRequired = false; + var hasHandlers = _eventContainer.RetainedMessageChangedEvent.HasHandlers; var payload = applicationMessage.Payload; var hasPayload = payload.Length > 0; @@ -86,10 +89,14 @@ public async Task UpdateMessage(string clientId, MqttApplicationMessage applicat } } + if (saveIsRequired && hasHandlers) + { + messagesForSave = new List(_messages.Values); + } _logger.Verbose("Client '{0}' set retained message for topic '{1}'.", clientId, applicationMessage.Topic); } - if (saveIsRequired) + if (saveIsRequired && hasHandlers) { messagesForSave = new List(_messages.Values); }