[block-cache] fix potential file descriptor leak

Encapsulate file descriptor into an object, to ensure that an fd will be
closed properly while exception raised, e.g., the block_cache throws
exception during the block_manager's construction.
This commit is contained in:
Ming-Hung Tsai
2020-02-22 17:37:22 +08:00
parent c85ea5ef76
commit 955e11bc28
9 changed files with 42 additions and 32 deletions

View File

@@ -18,7 +18,7 @@ cache_stream::cache_stream(string const &path,
// hack because cache uses LRU rather than MRU
cache_blocks_((cache_mem / block_size) / 2u),
fd_(file_utils::open_file(path, O_RDONLY | O_EXCL)),
fd_(path, O_RDONLY | O_EXCL),
v_(new bcache::noop_validator()),
cache_(new block_cache(fd_, block_size / 512, nr_blocks_, cache_mem)),
current_index_(0) {

View File

@@ -38,7 +38,7 @@ namespace thin_provisioning {
block_address nr_blocks_;
block_address cache_blocks_;
int fd_;
file_utils::file_descriptor fd_;
validator::ptr v_;
std::unique_ptr<block_cache> cache_;