From 728de5f87b4a5d3c0e86d33de2bffe4ab9daedf4 Mon Sep 17 00:00:00 2001 From: Mark Whitehorn Date: Wed, 27 Apr 2016 08:28:39 -0600 Subject: [PATCH] clean up file open/close logic --- src/modules/logger/log_writer.cpp | 55 ++++++++++++++++--------------- src/modules/logger/log_writer.h | 1 + src/modules/logger/logger.cpp | 2 +- 3 files changed, 30 insertions(+), 28 deletions(-) diff --git a/src/modules/logger/log_writer.cpp b/src/modules/logger/log_writer.cpp index 249180167a..3752706182 100644 --- a/src/modules/logger/log_writer.cpp +++ b/src/modules/logger/log_writer.cpp @@ -22,11 +22,23 @@ LogWriter::LogWriter(uint8_t *buffer, size_t buffer_size) : void LogWriter::start_log(const char *filename) { ::strncpy(_filename, filename, sizeof(_filename)); + _fd = ::open(_filename, O_CREAT | O_WRONLY, PX4_O_MODE_666); + + if (_fd < 0) { + PX4_WARN("can't open log file %s", _filename); + _should_run = false; + return; + + } else { + PX4_WARN("opened log file: %s", _filename); + _should_run = true; + _running = true; + } + // Clear buffer and counters _head = 0; _count = 0; _total_written = 0; - _should_run = true; notify(); } @@ -90,21 +102,7 @@ void LogWriter::run() } while (!_exit_thread) { - // Outer endless loop, start new file each time - // _filename must be set before setting _should_run = true - - - _fd = ::open(_filename, O_CREAT | O_WRONLY, PX4_O_MODE_666); - - if (_fd < 0) { - PX4_WARN("can't open log file %s", _filename); - _should_run = false; - continue; - } - - PX4_WARN("started, log file: %s", _filename); - - _should_run = true; + // Outer endless loop int poll_count = 0; int written = 0; @@ -164,22 +162,25 @@ void LogWriter::run() _total_written += written; } - if (!_should_run && written == static_cast(available) && !is_part) { + if (_running && !_should_run && written == static_cast(available) && !is_part) { // Stop only when all data written + _running = false; + _head = 0; + _count = 0; + + int res = ::close(_fd); + + if (res) { + PX4_WARN("error closing log file"); + + } else { + PX4_WARN("closed logfile: %s, bytes written: %zu", _filename, _total_written); + } + break; } } - _head = 0; - _count = 0; - - int res = ::close(_fd); - - if (res) { - PX4_WARN("error closing log file"); - } - - PX4_WARN("stopped, bytes written: %zu", _total_written); } } diff --git a/src/modules/logger/log_writer.h b/src/modules/logger/log_writer.h index f6fd35c4de..2c1b19f083 100644 --- a/src/modules/logger/log_writer.h +++ b/src/modules/logger/log_writer.h @@ -63,6 +63,7 @@ private: size_t _count = 0; size_t _total_written = 0; bool _should_run = false; + bool _running = false; bool _exit_thread = false; pthread_mutex_t _mtx; pthread_cond_t _cv; diff --git a/src/modules/logger/logger.cpp b/src/modules/logger/logger.cpp index 3005690ce2..2a53dbb1c8 100644 --- a/src/modules/logger/logger.cpp +++ b/src/modules/logger/logger.cpp @@ -356,7 +356,7 @@ void Logger::run() struct mallinfo alloc_info = {}; #endif /* DBGPRINT */ - PX4_WARN("started"); + PX4_WARN("logger started"); int mkdir_ret = mkdir(LOG_ROOT, S_IRWXU | S_IRWXG | S_IRWXO);