]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw/s3website: Fix ErrocDoc memory leak.
authorRobin H. Johnson <robin.johnson@dreamhost.com>
Wed, 18 May 2016 00:35:41 +0000 (17:35 -0700)
committerRobin H. Johnson <robin.johnson@dreamhost.com>
Wed, 18 May 2016 00:40:25 +0000 (17:40 -0700)
Yehuda pointed [1] out a memory leak with the RGWGetObj not being handed back, and
suggested that shared_ptr was used to handle it, rather than the prior approach
of explicitly calling handler->put_op.

This commit implements just that change, in isolation from other changes, for
ease of comparision testing.

X-Reference-1: https://github.com/ceph/ceph/pull/8669#discussion_r63445516
Signed-off-by: Robin H. Johnson <robin.johnson@dreamhost.com>
src/rgw/rgw_rest_s3.cc

index 2ca415b094b5ae1f5028b52d0e60a73ed06c699b..d697ca35410f29bde124498f387aae5c3e62f7b4 100644 (file)
@@ -3960,8 +3960,8 @@ int RGWHandler_REST_S3Website::serve_errordoc(int http_ret, const string& errord
   int ret = 0;
   s->formatter->reset(); /* Try to throw it all away */
 
-  RGWGetObj_ObjStore_S3Website* getop = (RGWGetObj_ObjStore_S3Website*) op_get();
-  if(!getop) {
+  std::shared_ptr<RGWGetObj_ObjStore_S3Website> getop( (RGWGetObj_ObjStore_S3Website*) op_get() );
+  if (getop.get() == NULL) {
     return -1; // Trigger double error handler
   }
   getop->init(store, s, this);
@@ -3972,13 +3972,13 @@ int RGWHandler_REST_S3Website::serve_errordoc(int http_ret, const string& errord
   getop->if_nomatch = NULL;
   s->object = errordoc_key;
 
-  ret = init_permissions(getop);
+  ret = init_permissions(getop.get());
   if (ret < 0) {
     ldout(s->cct, 20) << "serve_errordoc failed, init_permissions ret=" << ret << dendl;
     return -1; // Trigger double error handler
   }
 
-  ret = read_permissions(getop);
+  ret = read_permissions(getop.get());
   if (ret < 0) {
     ldout(s->cct, 20) << "serve_errordoc failed, read_permissions ret=" << ret << dendl;
     return -1; // Trigger double error handler