1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-06-29 19:03:16 +02:00

Merge pull request #12647 from DeterminateSystems/lock-json-logger

JSONLogger: Acquire a lock to prevent log messages from clobbering each other
This commit is contained in:
Jörg Thalheim 2025-03-13 16:43:09 +01:00 committed by GitHub
commit e9af7a0749
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -6,6 +6,7 @@
#include "config-global.hh" #include "config-global.hh"
#include "source-path.hh" #include "source-path.hh"
#include "position.hh" #include "position.hh"
#include "sync.hh"
#include <atomic> #include <atomic>
#include <sstream> #include <sstream>
@ -201,9 +202,22 @@ struct JSONLogger : Logger {
unreachable(); unreachable();
} }
struct State
{
};
Sync<State> _state;
void write(const nlohmann::json & json) void write(const nlohmann::json & json)
{ {
writeLine(fd, "@nix " + json.dump(-1, ' ', false, nlohmann::json::error_handler_t::replace)); auto line =
"@nix " +
json.dump(-1, ' ', false, nlohmann::json::error_handler_t::replace);
/* Acquire a lock to prevent log messages from clobbering each
other. */
auto state(_state.lock());
writeLine(fd, line);
} }
void log(Verbosity lvl, std::string_view s) override void log(Verbosity lvl, std::string_view s) override