]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
server: fix potential memory leak
authorxie xingguo <xie.xingguo@zte.com.cn>
Tue, 14 Jun 2016 12:39:24 +0000 (20:39 +0800)
committerxie xingguo <xie.xingguo@zte.com.cn>
Tue, 14 Jun 2016 13:10:24 +0000 (21:10 +0800)
Signed-off-by: xie xingguo <xie.xingguo@zte.com.cn>
src/mds/Server.cc

index e7ef6251d844b6e69e4a44961a095bb9c9a54ac8..fc84d0971d7dfbbd0ed3634b137099cafd386a40 100644 (file)
@@ -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.