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:
john30
2017-08-27 09:40:43 +02:00
parent b15efba1db
commit ca7c8bd4fa
7 changed files with 86 additions and 57 deletions
+14
View File
@@ -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