diff --git a/src/fit.cpp b/src/fit.cpp index 4aaf513..6c8aade 100644 --- a/src/fit.cpp +++ b/src/fit.cpp @@ -877,6 +877,7 @@ int main(int argc, char *argv[]) std::unique_ptr log_file; if(!options.log_file.empty()) { + // open the log file in binary mode, where supported, so character encoding is preserved log_file.reset(fopen(reinterpret_cast(options.log_file.c_str()), "ab")); if(!log_file) diff --git a/src/print_stream.cpp b/src/print_stream.cpp index a59c5d4..222337d 100644 --- a/src/print_stream.cpp +++ b/src/print_stream.cpp @@ -21,7 +21,7 @@ print_stream_t::~print_stream_t(void) void print_stream_t::print(FILE *stream, const char *prefix, const char *fmt, va_list valist) { - std::lock_guard lock(print_mtx); + std::unique_lock lock(print_mtx); va_list ap; @@ -47,6 +47,12 @@ void print_stream_t::print(FILE *stream, const char *prefix, const char *fmt, va fputc('\n', print_stream); } + + lock.unlock(); + + // flush log file on one thread to allow tailing it from another session + if(print_stream && lock.try_lock()) + fflush(print_stream); } void print_stream_t::info(const char *fmt, ...)