When emplacing a new backend, use an explicitly constructed
intrusive_ptr so that it gets destroyed if the emplace fails.
Though the destructor is already called, this behaviour cannot be relied
upon. std::map does not exhibit the same behaviour, and would have
leaked memory had it been used instead.
Signed-off-by: Vedansh Bhartia <vedanshbhartia@gmail.com>
try {
switch (gen.type) {
case log_type::omap:
- emplace(gen_id, new RGWDataChangesOmap(ioctx, datalog, gen_id, shards));
+ emplace(gen_id,
+ boost::intrusive_ptr<RGWDataChangesBE>(new RGWDataChangesOmap(ioctx, datalog, gen_id, shards))
+ );
break;
case log_type::fifo:
- emplace(gen_id, new RGWDataChangesFIFO(ioctx, datalog, gen_id, shards));
+ emplace(gen_id,
+ boost::intrusive_ptr<RGWDataChangesBE>(new RGWDataChangesFIFO(ioctx, datalog, gen_id, shards))
+ );
break;
default:
lderr(datalog.cct)