55
66#include < algorithm>
77#include < iosfwd>
8+ #include < mutex>
89#include < ostream>
910#include < sstream>
1011#include < string>
@@ -28,6 +29,7 @@ struct MockLogger : public Logger {
2829 std::variant<std::string, Error> payload;
2930 };
3031
32+ mutable std::mutex mutex;
3133 std::ostream* echo = nullptr ;
3234 std::vector<Entry> entries;
3335
@@ -41,6 +43,7 @@ struct MockLogger : public Logger {
4143 MockLogger () = default ;
4244
4345 void log_error (const LogFunc& write) override {
46+ std::lock_guard<std::mutex> lock{mutex};
4447 std::ostringstream stream;
4548 write (stream);
4649 if (echo) {
@@ -50,6 +53,7 @@ struct MockLogger : public Logger {
5053 }
5154
5255 void log_startup (const LogFunc& write) override {
56+ std::lock_guard<std::mutex> lock{mutex};
5357 std::ostringstream stream;
5458 write (stream);
5559 if (echo && policy == ERRORS_AND_STARTUP) {
@@ -59,13 +63,15 @@ struct MockLogger : public Logger {
5963 }
6064
6165 void log_error (const Error& error) override {
66+ std::lock_guard<std::mutex> lock{mutex};
6267 if (echo) {
6368 *echo << error << ' \n ' ;
6469 }
6570 entries.push_back (Entry{Entry::ERROR, error});
6671 }
6772
6873 void log_error (StringView message) override {
74+ std::lock_guard<std::mutex> lock{mutex};
6975 if (echo) {
7076 *echo << message << ' \n ' ;
7177 }
@@ -77,13 +83,15 @@ struct MockLogger : public Logger {
7783 int startup_count () const { return count (Entry::STARTUP); }
7884
7985 int count (Entry::Kind kind) const {
86+ std::lock_guard<std::mutex> lock{mutex};
8087 return std::count_if (
8188 entries.begin (), entries.end (),
8289 [kind](const Entry& entry) { return entry.kind == kind; });
8390 }
8491
8592 const Error& first_error () const {
8693 REQUIRE (error_count () > 0 );
94+ std::lock_guard<std::mutex> lock{mutex};
8795 auto found = std::find_if (
8896 entries.begin (), entries.end (),
8997 [](const Entry& entry) { return entry.kind == Entry::ERROR; });
@@ -92,6 +100,7 @@ struct MockLogger : public Logger {
92100
93101 const std::string& first_startup () const {
94102 REQUIRE (startup_count () > 0 );
103+ std::lock_guard<std::mutex> lock{mutex};
95104 auto found = std::find_if (
96105 entries.begin (), entries.end (),
97106 [](const Entry& entry) { return entry.kind == Entry::STARTUP; });
0 commit comments