static string notify_oid_prefix = "notify";
+RGWSI_Notify::RGWSI_Notify(CephContext *cct) : RGWServiceInstance(cct) {}
RGWSI_Notify::~RGWSI_Notify()
{
shutdown();
if (num_watchers <= 0)
num_watchers = 1;
- watchers = new RGWWatcher *[num_watchers];
-
int error = 0;
notify_objs.resize(num_watchers);
+ watchers.reserve(num_watchers);
+
for (int i=0; i < num_watchers; i++) {
string notify_oid;
return r;
}
- RGWWatcher *watcher = new RGWWatcher(cct, this, i, notify_obj);
- watchers[i] = watcher;
+ auto& watcher = watchers.emplace_back(cct, this, i, notify_obj);
- r = watcher->register_watch_async();
+ r = watcher.register_watch_async();
if (r < 0) {
ldpp_dout(dpp, 0) << "WARNING: register_watch_aio() returned " << r << dendl;
error = r;
}
}
- for (int i = 0; i < num_watchers; ++i) {
- int r = watchers[i]->register_watch_finish();
+ for (auto& watcher : watchers) {
+ int r = watcher.register_watch_finish();
if (r < 0) {
ldpp_dout(dpp, 0) << "WARNING: async watch returned " << r << dendl;
error = r;
void RGWSI_Notify::finalize_watch()
{
for (int i = 0; i < num_watchers; i++) {
- RGWWatcher *watcher = watchers[i];
if (watchers_set.find(i) != watchers_set.end())
- watcher->unregister_watch();
- delete watcher;
+ watchers[i].unregister_watch();
}
-
- delete[] watchers;
+ watchers.clear();
}
int RGWSI_Notify::do_start(optional_yield y, const DoutPrefixProvider *dpp)
rgw_pool control_pool;
int num_watchers{0};
- RGWWatcher **watchers{nullptr};
+ std::vector<RGWWatcher> watchers;
std::set<int> watchers_set;
std::vector<rgw_rados_ref> notify_objs;
void schedule_context(Context *c);
public:
- RGWSI_Notify(CephContext *cct): RGWServiceInstance(cct) {}
+ RGWSI_Notify(CephContext *cct);
virtual ~RGWSI_Notify() override;