From 721f9f901f7e2725318b30fc64d5448070fa09af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beat=20K=C3=BCng?= Date: Wed, 17 Apr 2019 06:55:49 +0200 Subject: [PATCH] log_writer_file: fix race condition for fast consecutive stop & start calls --- src/modules/logger/log_writer_file.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/modules/logger/log_writer_file.cpp b/src/modules/logger/log_writer_file.cpp index c47cf5cda2..6008edaf6c 100644 --- a/src/modules/logger/log_writer_file.cpp +++ b/src/modules/logger/log_writer_file.cpp @@ -83,6 +83,18 @@ LogWriterFile::~LogWriterFile() void LogWriterFile::start_log(LogType type, const char *filename) { + // At this point we don't expect the file to be open, but it can happen for very fast consecutive stop & start + // calls. In that case we wait for the thread to close the file first. + lock(); + + while (_buffers[(int)type].fd() >= 0) { + unlock(); + system_usleep(5000); + lock(); + } + + unlock(); + if (type == LogType::Full) { // register the current file with the hardfault handler: if the system crashes, // the hardfault handler will append the crash log to that file on the next reboot.