fix for potential access to no longer existing Message instances in DataHandler, validate MQTT topic during argument parsing, extended DataHandler registration to allow registering multiple instances at once, only create MqttHandler if active
This commit is contained in:
@@ -2559,8 +2559,10 @@ void MessageMap::invalidateCache(Message* message) {
|
||||
|
||||
void MessageMap::addPollMessage(bool toFront, Message* message) {
|
||||
if (message != NULL && message->getPollPriority() > 0) {
|
||||
lock();
|
||||
message->m_lastPollTime = toFront ? 0 : m_pollMessages.size();
|
||||
m_pollMessages.push(message);
|
||||
unlock();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#include <map>
|
||||
#include <queue>
|
||||
#include <functional>
|
||||
#include <mutex>
|
||||
#include "lib/ebus/data.h"
|
||||
#include "lib/ebus/result.h"
|
||||
#include "lib/ebus/symbol.h"
|
||||
@@ -1432,6 +1433,16 @@ class MessageMap : public MappedFileReader {
|
||||
*/
|
||||
bool decodeCircuit(const string& circuit, OutputFormat outputFormat, ostringstream* output) const;
|
||||
|
||||
/**
|
||||
* Lock this instance against simultaneous modifying access.
|
||||
*/
|
||||
void lock() { m_mutex.lock(); }
|
||||
|
||||
/**
|
||||
* Unlock this instance against simultaneous modifying access.
|
||||
*/
|
||||
void unlock() { m_mutex.unlock(); }
|
||||
|
||||
/**
|
||||
* Removes all @a Message instances.
|
||||
*/
|
||||
@@ -1545,6 +1556,9 @@ class MessageMap : public MappedFileReader {
|
||||
|
||||
/** additional attributes by circuit name. */
|
||||
map<string, AttributedItem*> m_circuitData;
|
||||
|
||||
/** a @a mutex for locking out changes. */
|
||||
mutex m_mutex;
|
||||
};
|
||||
|
||||
} // namespace ebusd
|
||||
|
||||
Reference in New Issue
Block a user