From ec6c53eb6093fbd4f2f1c2511491b20e57467964 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beat=20K=C3=BCng?= Date: Mon, 9 May 2016 17:24:54 +0200 Subject: [PATCH] logger: correct cleanup in case 'logger start' fails --- src/modules/logger/logger.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/modules/logger/logger.cpp b/src/modules/logger/logger.cpp index ed4d7db2db..f1ae7e518f 100644 --- a/src/modules/logger/logger.cpp +++ b/src/modules/logger/logger.cpp @@ -74,6 +74,12 @@ int logger_main(int argc, char *argv[]) return 1; } + //Check if thread exited, but the object has not been destroyed yet (happens in case of an error) + if (logger_task == -1 && logger_ptr) { + delete logger_ptr; + logger_ptr = nullptr; + } + if (!strcmp(argv[1], "start")) { if (logger_ptr != nullptr) { @@ -148,6 +154,7 @@ int Logger::start(char *const *argv) (char *const *)argv); if (logger_task < 0) { + logger_task = -1; PX4_WARN("task start failed"); return -errno; } @@ -245,6 +252,8 @@ void Logger::run_trampoline(int argc, char *argv[]) } else { logger_ptr->run(); } + + logger_task = -1; } enum class MessageType : uint8_t { @@ -626,8 +635,6 @@ void Logger::run() if (ret) { PX4_WARN("join failed: %d", ret); } - - logger_task = -1; } int Logger::create_log_dir()