]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
rgw: delete object in error path
authorYehuda Sadeh <yehuda@redhat.com>
Thu, 13 Jul 2017 16:36:06 +0000 (09:36 -0700)
committerYehuda Sadeh <yehuda@redhat.com>
Thu, 13 Jul 2017 18:18:53 +0000 (11:18 -0700)
Fixes: http://tracker.ceph.com/issues/20620
Signed-off-by: Yehuda Sadeh <yehuda@redhat.com>
src/rgw/rgw_rados.cc
src/rgw/rgw_rest_conn.cc

index 0dffd0d4fe15320b3bfbeb2d32b6730f72f616b5..b951ae2109c65fbe5917d81675e349631984b50f 100644 (file)
@@ -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;
   }
 
index efac447282d9129efbb554e1753141b8e803cef6..aa3e0c8881f355857d4097ee4ca08c0ae53f211c 100644 (file)
@@ -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, &params);
-  return (*req)->put_obj_init(key, obj, obj_size, attrs);
+  RGWRESTStreamWriteRequest *wr = new RGWRESTStreamWriteRequest(cct, url, NULL, &params);
+  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)