summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorThiago Marcos P. Santos <thiago@mapbox.com>2015-07-08 17:11:00 +0300
committerThiago Marcos P. Santos <thiago@mapbox.com>2015-07-08 23:48:05 +0300
commit1fbbedd47b07b9f977d86a14c8ba4bb3f36879d4 (patch)
treeebf4719b7323e685f60479017194f2545a216516 /test
parent0014c0bd8d1a44946f68b4aef72b6451de25187a (diff)
downloadqtlocation-mapboxgl-1fbbedd47b07b9f977d86a14c8ba4bb3f36879d4.tar.gz
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.
Diffstat (limited to 'test')
-rw-r--r--test/fixtures/fixture_log_observer.cpp8
-rw-r--r--test/fixtures/fixture_log_observer.hpp4
2 files changed, 11 insertions, 1 deletions
diff --git a/test/fixtures/fixture_log_observer.cpp b/test/fixtures/fixture_log_observer.cpp
index f28bbdcd25..a6e89e2e79 100644
--- a/test/fixtures/fixture_log_observer.cpp
+++ b/test/fixtures/fixture_log_observer.cpp
@@ -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) {
diff --git a/test/fixtures/fixture_log_observer.hpp b/test/fixtures/fixture_log_observer.hpp
index f28bb552ae..f2ccb5cb58 100644
--- a/test/fixtures/fixture_log_observer.hpp
+++ b/test/fixtures/fixture_log_observer.hpp
@@ -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();