diff options
author | Thiago Marcos P. Santos <thiago@mapbox.com> | 2015-07-08 17:11:00 +0300 |
---|---|---|
committer | Thiago Marcos P. Santos <thiago@mapbox.com> | 2015-07-08 23:48:05 +0300 |
commit | 1fbbedd47b07b9f977d86a14c8ba4bb3f36879d4 (patch) | |
tree | ebf4719b7323e685f60479017194f2545a216516 /test | |
parent | 0014c0bd8d1a44946f68b4aef72b6451de25187a (diff) | |
download | qtlocation-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.cpp | 8 | ||||
-rw-r--r-- | test/fixtures/fixture_log_observer.hpp | 4 |
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(); |