Make FixtureLogObserver thread-safe

We can log for different threads (main, map, workers, etc) so
we need to lock before adding the messages on the list.

This was causing few tests to randomly crash.
This commit is contained in:
Thiago Marcos P. Santos
2015-07-08 17:11:00 +03:00
parent 0014c0bd8d
commit 1fbbedd47b
2 changed files with 11 additions and 1 deletions

View File

@@ -31,16 +31,22 @@ bool FixtureLog::Observer::onRecord(EventSeverity severity,
Event event,
int64_t code,
const std::string& msg) {
std::lock_guard<std::mutex> lock(messagesMutex);
messages.emplace_back(severity, event, code, msg);
return true;
}
bool FixtureLog::Observer::empty() const {
std::lock_guard<std::mutex> lock(messagesMutex);
return messages.empty();
}
size_t FixtureLog::Observer::count(const Message& message) const {
std::lock_guard<std::mutex> lock(messagesMutex);
size_t message_count = 0;
for (const auto& msg : messages) {
if (msg == message) {
@@ -70,6 +76,8 @@ FixtureLog::~FixtureLog() {
}
std::vector<FixtureLog::Message> FixtureLogObserver::unchecked() const {
std::lock_guard<std::mutex> lock(messagesMutex);
std::vector<Message> unchecked_messages;
for (const auto& msg : messages) {
if (!msg.checked) {

View File

@@ -5,6 +5,7 @@
#include <vector>
#include <cstdarg>
#include <mutex>
#include <iostream>
namespace mbgl {
@@ -42,9 +43,10 @@ public:
size_t count(const Message& message) const;
std::vector<Message> unchecked() const;
public:
private:
FixtureLog* log;
std::vector<Message> messages;
mutable std::mutex messagesMutex;
};
FixtureLog();