From cfa491467e1a00cbd2f9c4b468618380acf4e988 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beat=20K=C3=BCng?= Date: Mon, 9 May 2016 11:08:45 +0200 Subject: [PATCH] logger: fix 'logger stop' when nothing has been logged yet when executing 'logger stop' and the logger did not log yet, _running was false, so log_writer thread would never exit. --- src/modules/logger/log_writer.cpp | 17 ++++++++++------- src/modules/logger/log_writer.h | 2 +- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/modules/logger/log_writer.cpp b/src/modules/logger/log_writer.cpp index f4ade4b1b7..2630e5238a 100644 --- a/src/modules/logger/log_writer.cpp +++ b/src/modules/logger/log_writer.cpp @@ -182,6 +182,7 @@ void LogWriter::run() } pthread_mutex_unlock(&_mtx); + written = 0; if (available > 0) { perf_begin(perf_write); @@ -211,20 +212,22 @@ void LogWriter::run() _total_written += written; } - if (_running && !_should_run && written == static_cast(available) && !is_part) { + if (!_should_run && written == static_cast(available) && !is_part) { // Stop only when all data written _running = false; _head = 0; _count = 0; - int res = ::close(_fd); - _fd = -1; + if (_fd >= 0) { + int res = ::close(_fd); + _fd = -1; - if (res) { - PX4_WARN("error closing log file"); + if (res) { + PX4_WARN("error closing log file"); - } else { - PX4_WARN("closed logfile: %s, bytes written: %zu", _filename, _total_written); + } else { + PX4_WARN("closed logfile: %s, bytes written: %zu", _filename, _total_written); + } } break; diff --git a/src/modules/logger/log_writer.h b/src/modules/logger/log_writer.h index 7ddac85d98..5014169f20 100644 --- a/src/modules/logger/log_writer.h +++ b/src/modules/logger/log_writer.h @@ -117,7 +117,7 @@ private: static constexpr size_t _min_write_chunk = 4096; char _filename[64]; - int _fd; + int _fd = -1; uint8_t *_buffer = nullptr; const size_t _buffer_size; size_t _head = 0; ///< next position to write to