From 89f74c98ea43df46291c8bec890b3a75c7ce38b4 Mon Sep 17 00:00:00 2001 From: xie xingguo Date: Tue, 14 Jun 2016 20:39:24 +0800 Subject: [PATCH] server: fix potential memory leak Signed-off-by: xie xingguo --- src/mds/Server.cc | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/mds/Server.cc b/src/mds/Server.cc index e7ef6251d84..fc84d0971d7 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -4195,9 +4195,11 @@ void Server::handle_set_vxattr(MDRequestRef& mdr, CInode *cur, if (r == -ENOENT) { epoch_t req_epoch = req->get_osdmap_epoch(); if (req_epoch > epoch) { - if (!mds->objecter->wait_for_map(req_epoch, - new C_OnFinisher(new C_IO_Wrapper(mds, new C_MDS_RetryRequest(mdcache, mdr)), mds->finisher))) - return; + Context *fin = new C_OnFinisher(new C_IO_Wrapper(mds, + new C_MDS_RetryRequest(mdcache, mdr)), mds->finisher); + if (!mds->objecter->wait_for_map(req_epoch, fin)) + return; + delete fin; } else if (req_epoch == 0 && !mdr->waited_for_osdmap) { // For compatibility with client w/ old code, we still need get the latest map. // One day if COMPACT_VERSION of MClientRequest >=3, we can remove those code. @@ -4246,9 +4248,11 @@ void Server::handle_set_vxattr(MDRequestRef& mdr, CInode *cur, if (r == -ENOENT) { epoch_t req_epoch = req->get_osdmap_epoch(); if (req_epoch > epoch) { - if (!mds->objecter->wait_for_map(req_epoch, - new C_OnFinisher(new C_IO_Wrapper(mds, new C_MDS_RetryRequest(mdcache, mdr)), mds->finisher))) - return; + Context *fin = new C_OnFinisher(new C_IO_Wrapper(mds, + new C_MDS_RetryRequest(mdcache, mdr)), mds->finisher); + if (!mds->objecter->wait_for_map(req_epoch, fin)) + return; + delete fin; } else if (req_epoch == 0 && !mdr->waited_for_osdmap) { // For compatibility with client w/ old code, we still need get the latest map. // One day if COMPACT_VERSION of MClientRequest >=3, we can remove those code. -- 2.47.3