int RGWDataAccess::Bucket::get_object(const rgw_obj_key& key,
ObjectRef *obj) {
- obj->reset(new Object(sd, self_ref, key));
+ obj->reset(new Object(sd, shared_from_this(), key));
return 0;
}
using BucketRef = std::shared_ptr<Bucket>;
using ObjectRef = std::shared_ptr<Object>;
- class Bucket {
+ class Bucket : public enable_shared_from_this<Bucket> {
friend class RGWDataAccess;
friend class Object;
- std::shared_ptr<Bucket> self_ref;
-
RGWDataAccess *sd{nullptr};
RGWBucketInfo bucket_info;
string tenant;
std::optional<bufferlist> aclbl;
Object(RGWDataAccess *_sd,
- BucketRef& _bucket,
+ BucketRef&& _bucket,
const rgw_obj_key& _key) : sd(_sd),
bucket(_bucket),
key(_key) {}
const string bucket_id,
BucketRef *bucket) {
bucket->reset(new Bucket(this, tenant, name, bucket_id));
- (*bucket)->self_ref = *bucket;
return (*bucket)->init();
}
const map<string, bufferlist>& attrs,
BucketRef *bucket) {
bucket->reset(new Bucket(this));
- (*bucket)->self_ref = *bucket;
return (*bucket)->init(bucket_info, attrs);
}
friend class Bucket;