From 2fd7bc8cbe4a2e23553e716ce0be75937853e07b Mon Sep 17 00:00:00 2001 From: "Robin H. Johnson" Date: Tue, 17 May 2016 17:35:41 -0700 Subject: [PATCH] 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 --- src/rgw/rgw_rest_s3.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/rgw/rgw_rest_s3.cc b/src/rgw/rgw_rest_s3.cc index 2ca415b094b5a..d697ca35410f2 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 -- 2.39.5