1
1
Fork 0
mirror of https://github.com/NixOS/nix.git synced 2025-12-20 07:51:07 +01:00

Make 'logger' a std::unique_ptr

This prevents it from being leaked (see
bb411e4ae1 for an example of this).
This commit is contained in:
Eelco Dolstra 2022-08-25 16:57:03 +02:00
parent 1f688d62d7
commit 2018413e3e
8 changed files with 45 additions and 42 deletions

View file

@ -6,7 +6,8 @@ namespace nix {
LogFormat defaultLogFormat = LogFormat::raw;
LogFormat parseLogFormat(const std::string & logFormatStr) {
LogFormat parseLogFormat(const std::string & logFormatStr)
{
if (logFormatStr == "raw" || getEnv("NIX_GET_COMPLETIONS"))
return LogFormat::raw;
else if (logFormatStr == "raw-with-logs")
@ -20,7 +21,8 @@ LogFormat parseLogFormat(const std::string & logFormatStr) {
throw Error("option 'log-format' has an invalid value '%s'", logFormatStr);
}
Logger * makeDefaultLogger() {
std::unique_ptr<Logger> makeDefaultLogger()
{
switch (defaultLogFormat) {
case LogFormat::raw:
return makeSimpleLogger(false);
@ -40,16 +42,19 @@ Logger * makeDefaultLogger() {
}
}
void setLogFormat(const std::string & logFormatStr) {
void setLogFormat(const std::string & logFormatStr)
{
setLogFormat(parseLogFormat(logFormatStr));
}
void setLogFormat(const LogFormat & logFormat) {
void setLogFormat(const LogFormat & logFormat)
{
defaultLogFormat = logFormat;
createDefaultLogger();
}
void createDefaultLogger() {
void createDefaultLogger()
{
logger = makeDefaultLogger();
}

View file

@ -117,13 +117,15 @@ public:
{
{
auto state(state_.lock());
if (!state->active) return;
state->active = false;
writeToStderr("\r\e[K");
updateCV.notify_one();
quitCV.notify_one();
if (state->active) {
state->active = false;
writeToStderr("\r\e[K");
updateCV.notify_one();
quitCV.notify_one();
}
}
updateThread.join();
if (updateThread.joinable())
updateThread.join();
}
void pause() override {
@ -553,9 +555,9 @@ public:
}
};
Logger * makeProgressBar()
std::unique_ptr<Logger> makeProgressBar()
{
return new ProgressBar(isTTY());
return std::make_unique<ProgressBar>(isTTY());
}
void startProgressBar()
@ -565,9 +567,8 @@ void startProgressBar()
void stopProgressBar()
{
auto progressBar = dynamic_cast<ProgressBar *>(logger);
if (progressBar) progressBar->stop();
if (auto progressBar = dynamic_cast<ProgressBar *>(logger.get()))
progressBar->stop();
}
}

View file

@ -5,7 +5,7 @@
namespace nix {
Logger * makeProgressBar();
std::unique_ptr<Logger> makeProgressBar();
void startProgressBar();