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:
8
test/fixtures/fixture_log_observer.cpp
vendored
8
test/fixtures/fixture_log_observer.cpp
vendored
@@ -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) {
|
||||
|
||||
4
test/fixtures/fixture_log_observer.hpp
vendored
4
test/fixtures/fixture_log_observer.hpp
vendored
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user