From: xie xingguo Date: Tue, 14 Jun 2016 12:39:24 +0000 (+0800) Subject: server: fix potential memory leak X-Git-Tag: v11.0.0~175^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=89f74c98ea43df46291c8bec890b3a75c7ce38b4;p=ceph.git server: fix potential memory leak Signed-off-by: xie xingguo --- diff --git a/src/mds/Server.cc b/src/mds/Server.cc index e7ef6251d844..fc84d0971d7d 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.