@@ -314,13 +314,11 @@ std::shared_ptr<ShareBuffer::Reader> ShareBuffer::MakeLocalReader(const std::str
314314 UC_ERROR (" Failed to make buffer({}) on host." , blockSize_);
315315 return nullptr ;
316316 }
317- Reader* reader = nullptr ;
318317 try {
319- reader = new Reader{block, path, blockSize_, ioDirect_, false , addr. get ()};
320- return std::shared_ptr< Reader>(reader ,
321- [addr = std::move (addr)](Reader* reader) { delete reader; });
318+ return std::shared_ptr< Reader>(
319+ new Reader{block, path, blockSize_, ioDirect_, false , addr. get ()} ,
320+ [addr = std::move (addr)](Reader* reader) { delete reader; });
322321 } catch (const std::exception& e) {
323- if (reader) { delete reader; }
324322 UC_ERROR (" Failed({}) to create reader." , e.what ());
325323 return nullptr ;
326324 }
@@ -331,17 +329,19 @@ std::shared_ptr<ShareBuffer::Reader> ShareBuffer::MakeSharedReader(const std::st
331329 size_t position)
332330{
333331 void * addr = this ->BlockAt (position);
334- Reader* reader = nullptr ;
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+ }
335338 try {
336- reader = new Reader{block, path, blockSize_, ioDirect_, true , addr};
337339 return std::shared_ptr<Reader>(reader, [this , position](Reader* reader) {
338340 delete reader;
339341 this ->ReleaseBlock (position);
340342 });
341- } catch (...) {
342- this ->ReleaseBlock (position);
343- if (reader) { delete reader; }
344- UC_ERROR (" Failed to create reader." );
343+ } catch (const std::exception& e) {
344+ UC_ERROR (" Failed({}) to create reader." , e.what ());
345345 return nullptr ;
346346 }
347347}
0 commit comments