diff --git a/src/modules/logger/log_writer_file.cpp b/src/modules/logger/log_writer_file.cpp index f9f08fddb6..1ef9af4462 100644 --- a/src/modules/logger/log_writer_file.cpp +++ b/src/modules/logger/log_writer_file.cpp @@ -443,13 +443,19 @@ void LogWriterFile::run() if (!buffer._should_run && written == static_cast(available) && !is_part) { /* Stop only when all data written */ + pthread_mutex_unlock(&_mtx); buffer.close_file(); + pthread_mutex_lock(&_mtx); + buffer.reset(); } } else { PX4_ERR("write failed (%i)", errno); buffer._should_run = false; + pthread_mutex_unlock(&_mtx); buffer.close_file(); + pthread_mutex_lock(&_mtx); + buffer.reset(); } } else if (call_fsync && buffer._should_run) { @@ -458,7 +464,10 @@ void LogWriterFile::run() pthread_mutex_lock(&_mtx); } else if (available == 0 && !buffer._should_run) { + pthread_mutex_unlock(&_mtx); buffer.close_file(); + pthread_mutex_lock(&_mtx); + buffer.reset(); } /* if split into 2 parts, write the second part immediately as well */ @@ -687,12 +696,8 @@ ssize_t LogWriterFile::LogFileBuffer::write_to_file(const void *buffer, size_t s void LogWriterFile::LogFileBuffer::close_file() { - _head = 0; - _count = 0; - if (_fd >= 0) { int res = close(_fd); - _fd = -1; if (res) { PX4_WARN("closing log file failed (%i)", errno); @@ -703,5 +708,12 @@ void LogWriterFile::LogFileBuffer::close_file() } } +void LogWriterFile::LogFileBuffer::reset() +{ + _head = 0; + _count = 0; + _fd = -1; +} + } } diff --git a/src/modules/logger/log_writer_file.h b/src/modules/logger/log_writer_file.h index b6bfcdcf8b..f103a4eb50 100644 --- a/src/modules/logger/log_writer_file.h +++ b/src/modules/logger/log_writer_file.h @@ -171,6 +171,8 @@ private: void close_file(); + void reset(); + size_t get_read_ptr(void **ptr, bool *is_part); /**