From: Robin H. Johnson Date: Wed, 18 May 2016 00:35:41 +0000 (-0700) Subject: rgw/s3website: Fix ErrocDoc memory leak. X-Git-Tag: v11.0.0~508^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=2fd7bc8cbe4a2e23553e716ce0be75937853e07b;p=ceph.git rgw/s3website: Fix ErrocDoc memory leak. 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 --- diff --git a/src/rgw/rgw_rest_s3.cc b/src/rgw/rgw_rest_s3.cc index 2ca415b094b5..d697ca35410f 100644 --- a/src/rgw/rgw_rest_s3.cc +++ b/src/rgw/rgw_rest_s3.cc @@ -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 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