From: Kefu Chai Date: Wed, 4 Dec 2019 15:44:05 +0000 (+0800) Subject: osd: use unique_ptr for managing life cycles X-Git-Tag: v15.1.0~585^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=6651faddbae116ec4fe0cfa503601b4da52940fd;p=ceph.git osd: use unique_ptr for managing life cycles instead of `new` and `delete` manually, use `unique_ptr<>` for managing life cycles of member variables. Signed-off-by: Kefu Chai --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 5b4c8b3c26b6..64bd402ac382 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -248,7 +248,9 @@ OSDService::OSDService(OSD *osd) : last_recalibrate(ceph_clock_now()), promote_max_objects(0), promote_max_bytes(0), - objecter(new Objecter(osd->client_messenger->cct, osd->objecter_messenger, osd->monc, NULL, 0, 0)), + objecter(make_unique(osd->client_messenger->cct, + osd->objecter_messenger, + osd->monc, nullptr, 0, 0)), m_objecter_finishers(cct->_conf->osd_objecter_finishers), watch_timer(osd->client_messenger->cct, watch_lock), next_notif_id(0), @@ -276,23 +278,11 @@ OSDService::OSDService(OSD *osd) : for (int i = 0; i < m_objecter_finishers; i++) { ostringstream str; str << "objecter-finisher-" << i; - Finisher *fin = new Finisher(osd->client_messenger->cct, str.str(), "finisher"); - objecter_finishers.push_back(fin); + auto fin = make_unique(osd->client_messenger->cct, str.str(), "finisher"); + objecter_finishers.push_back(std::move(fin)); } } -OSDService::~OSDService() -{ - delete objecter; - - for (auto f : objecter_finishers) { - delete f; - f = NULL; - } -} - - - #ifdef PG_DEBUG_REFS void OSDService::add_pgid(spg_t pgid, PG *pg){ std::lock_guard l(pgid_lock); @@ -499,7 +489,7 @@ void OSDService::shutdown() } objecter->shutdown(); - for (auto f : objecter_finishers) { + for (auto& f : objecter_finishers) { f->wait_for_empty(); f->stop(); } @@ -511,7 +501,7 @@ void OSDService::shutdown() void OSDService::init() { reserver_finisher.start(); - for (auto f : objecter_finishers) { + for (auto& f : objecter_finishers) { f->start(); } objecter->set_client_incarnation(0); @@ -3561,7 +3551,7 @@ int OSD::init() hb_front_server_messenger->add_dispatcher_head(&heartbeat_dispatcher); hb_back_server_messenger->add_dispatcher_head(&heartbeat_dispatcher); - objecter_messenger->add_dispatcher_head(service.objecter); + objecter_messenger->add_dispatcher_head(service.objecter.get()); service.init(); service.publish_map(osdmap); diff --git a/src/osd/OSD.h b/src/osd/OSD.h index d6b5bcac5f38..30817f11559c 100644 --- a/src/osd/OSD.h +++ b/src/osd/OSD.h @@ -519,13 +519,13 @@ public: return m_objecter_finishers; } Finisher* get_objecter_finisher(int shard) { - return objecter_finishers[shard]; + return objecter_finishers[shard].get(); } // -- Objecter, for tiering reads/writes from/to other OSDs -- - Objecter *objecter; + std::unique_ptr objecter; int m_objecter_finishers; - vector objecter_finishers; + std::vector> objecter_finishers; // -- Watch -- ceph::mutex watch_lock = ceph::make_mutex("OSDService::watch_lock"); @@ -911,7 +911,7 @@ public: #endif explicit OSDService(OSD *osd); - ~OSDService(); + ~OSDService() = default; }; /*