From 35ede02d8a4a1cdeb500494309e413abf5c05fb4 Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Thu, 13 Jul 2017 09:36:06 -0700 Subject: [PATCH] rgw: delete object in error path Fixes: http://tracker.ceph.com/issues/20620 Signed-off-by: Yehuda Sadeh --- src/rgw/rgw_rados.cc | 1 - src/rgw/rgw_rest_conn.cc | 10 ++++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index 0dffd0d4fe1..b951ae2109c 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -7789,7 +7789,6 @@ int RGWRados::copy_obj_to_remote_dest(RGWObjState *astate, int ret = rest_master_conn->put_obj_init(user_id, dest_obj, astate->size, src_attrs, &out_stream_req); if (ret < 0) { - delete out_stream_req; return ret; } diff --git a/src/rgw/rgw_rest_conn.cc b/src/rgw/rgw_rest_conn.cc index efac447282d..aa3e0c8881f 100644 --- a/src/rgw/rgw_rest_conn.cc +++ b/src/rgw/rgw_rest_conn.cc @@ -114,8 +114,14 @@ int RGWRESTConn::put_obj_init(const rgw_user& uid, rgw_obj& obj, uint64_t obj_si param_vec_t params; populate_params(params, &uid, self_zone_group); - *req = new RGWRESTStreamWriteRequest(cct, url, NULL, ¶ms); - return (*req)->put_obj_init(key, obj, obj_size, attrs); + RGWRESTStreamWriteRequest *wr = new RGWRESTStreamWriteRequest(cct, url, NULL, ¶ms); + ret = wr->put_obj_init(key, obj, obj_size, attrs); + if (ret < 0) { + delete wr; + return ret; + } + *req = wr; + return 0; } int RGWRESTConn::complete_request(RGWRESTStreamWriteRequest *req, string& etag, real_time *mtime) -- 2.39.5