Update step logger

Fixed bugs with multithreading and added protection against data lost with insufficiently accurate setting of the maximum value of the file size
This commit is contained in:
puasonych 2018-05-30 12:48:56 +05:00
parent eb2118c181
commit 877a618400

View File

@ -99,8 +99,11 @@ public:
_file_helper.open(_current_filename); _file_helper.open(_current_filename);
_current_size = _file_helper.size(); // expensive. called only once _current_size = _file_helper.size(); // expensive. called only once
_current_size += _file_header.formatted.size(); if (!_current_size)
if (_current_size) _file_helper.write(_file_header); {
_current_size += _file_header.formatted.size();
if (_current_size) _file_helper.write(_file_header);
}
} }
~step_file_sink() ~step_file_sink()
@ -123,14 +126,17 @@ protected:
{ {
filename_t new_filename; filename_t new_filename;
std::tie(new_filename, std::ignore) = FileNameCalc::calc_filename(_base_filename, _tmp_ext); std::tie(new_filename, std::ignore) = FileNameCalc::calc_filename(_base_filename, _tmp_ext);
if (new_filename != _current_filename)
bool change_occured = !details::file_helper::file_exists(new_filename);
if (change_occured) close_current_file();
_current_filename = std::move(new_filename);
_file_helper.open(_current_filename);
_tp = _next_tp();
if (change_occured)
{ {
close_current_file();
// std::tie(_current_filename, std::ignore) = FileNameCalc::calc_filename(_base_filename, _tmp_ext);
_file_helper.open(_current_filename);
_tp = _next_tp();
_current_size = _file_header.formatted.size(); _current_size = _file_header.formatted.size();
if (_current_size) _file_helper.write(_file_header); if (_current_size) _file_helper.write(_file_header);
} }