From 1fbbedd47b07b9f977d86a14c8ba4bb3f36879d4 Mon Sep 17 00:00:00 2001 From: "Thiago Marcos P. Santos" Date: Wed, 8 Jul 2015 17:11:00 +0300 Subject: 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. --- test/fixtures/fixture_log_observer.cpp | 8 ++++++++ test/fixtures/fixture_log_observer.hpp | 4 +++- 2 files changed, 11 insertions(+), 1 deletion(-) (limited to 'test') 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 lock(messagesMutex); + messages.emplace_back(severity, event, code, msg); return true; } bool FixtureLog::Observer::empty() const { + std::lock_guard lock(messagesMutex); + return messages.empty(); } size_t FixtureLog::Observer::count(const Message& message) const { + std::lock_guard lock(messagesMutex); + size_t message_count = 0; for (const auto& msg : messages) { if (msg == message) { @@ -70,6 +76,8 @@ FixtureLog::~FixtureLog() { } std::vector FixtureLogObserver::unchecked() const { + std::lock_guard lock(messagesMutex); + std::vector 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 #include +#include #include namespace mbgl { @@ -42,9 +43,10 @@ public: size_t count(const Message& message) const; std::vector unchecked() const; - public: + private: FixtureLog* log; std::vector messages; + mutable std::mutex messagesMutex; }; FixtureLog(); -- cgit v1.2.1