Fix data race in cached_block

This commit is contained in:
Marcus Holland-Moritz 2022-10-21 08:57:21 +02:00
parent b07863bcf6
commit 59b87cdd9f

View File

@ -62,7 +62,8 @@ class cached_block {
, mm_(std::move(mm)) , mm_(std::move(mm))
, section_(b) , section_(b)
, LOG_PROXY_INIT(lgr) , LOG_PROXY_INIT(lgr)
, release_(release) { , release_(release)
, uncompressed_size_{decompressor_->uncompressed_size()} {
if (!section_.check_fast(*mm_)) { if (!section_.check_fast(*mm_)) {
DWARFS_THROW(runtime_error, "block data integrity check failed"); DWARFS_THROW(runtime_error, "block data integrity check failed");
} }
@ -99,10 +100,7 @@ class cached_block {
} }
} }
size_t uncompressed_size() const { size_t uncompressed_size() const { return uncompressed_size_; }
return decompressor_ ? decompressor_->uncompressed_size()
: range_end_.load();
}
void touch() { last_access_ = std::chrono::steady_clock::now(); } void touch() { last_access_ = std::chrono::steady_clock::now(); }
@ -136,6 +134,7 @@ class cached_block {
fs_section section_; fs_section section_;
LOG_PROXY_DECL(debug_logger_policy); LOG_PROXY_DECL(debug_logger_policy);
bool const release_; bool const release_;
size_t const uncompressed_size_;
std::chrono::steady_clock::time_point last_access_; std::chrono::steady_clock::time_point last_access_;
}; };