]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: pass boost intrusive_ptr to DataLogBackends flat_map 51962/head
authorVedansh Bhartia <vedanshbhartia@gmail.com>
Wed, 7 Jun 2023 15:09:51 +0000 (20:39 +0530)
committerVedansh Bhartia <vedanshbhartia@gmail.com>
Wed, 7 Jun 2023 15:09:51 +0000 (20:39 +0530)
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>
src/rgw/driver/rados/rgw_datalog.cc

index 5bacea7018b5f7c6524f55c968d0c067d70b00a8..167cbcdba4a89daa06c9bf1b7fea1fbab5110fbe 100644 (file)
@@ -440,10 +440,14 @@ bs::error_code DataLogBackends::handle_init(entries_t e) noexcept {
     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)