Skip to content

Commit 6556bfd

Browse files
authored
[bugfix] double-release shared-block while make reader failed (#604)
1 parent d59e308 commit 6556bfd

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

ucm/store/pcstore/cc/domain/trans/share_buffer.cc

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -329,14 +329,18 @@ std::shared_ptr<ShareBuffer::Reader> ShareBuffer::MakeSharedReader(const std::st
329329
size_t position)
330330
{
331331
void* addr = this->BlockAt(position);
332+
auto reader = new (std::nothrow) Reader(block, path, blockSize_, ioDirect_, true, addr);
333+
if (!reader) [[unlikely]] {
334+
this->ReleaseBlock(position);
335+
UC_ERROR("Failed to create reader.");
336+
return nullptr;
337+
}
332338
try {
333-
return std::shared_ptr<Reader>(new Reader{block, path, blockSize_, ioDirect_, true, addr},
334-
[this, position](Reader* reader) {
335-
delete reader;
336-
this->ReleaseBlock(position);
337-
});
339+
return std::shared_ptr<Reader>(reader, [this, position](Reader* reader) {
340+
delete reader;
341+
this->ReleaseBlock(position);
342+
});
338343
} catch (const std::exception& e) {
339-
this->ReleaseBlock(position);
340344
UC_ERROR("Failed({}) to create reader.", e.what());
341345
return nullptr;
342346
}

0 commit comments

Comments
 (0)