]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/ReplicatedPG: Fix a memory leak in do_pg_op. 4065/head
authorJianpeng Ma <jianpeng.ma@intel.com>
Wed, 18 Mar 2015 13:11:04 +0000 (21:11 +0800)
committerJianpeng Ma <jianpeng.ma@intel.com>
Thu, 19 Mar 2015 00:35:52 +0000 (08:35 +0800)
If op have pgls_filter & pgnls_filter at the same time, it don't free
the first filter.

Signed-off-by: Jianpeng Ma <jianpeng.ma@intel.com>
src/osd/ReplicatedPG.cc

index c7bf29805395779ecba9aef2b9ae07c022afd934..785ec708a119a98e95e46d7b58a44e18110414b8 100644 (file)
@@ -1008,6 +1008,8 @@ void ReplicatedPG::do_pg_op(OpRequestRef op)
        dout(10) << " pgnls result=" << result << " outdata.length()="
                 << osd_op.outdata.length() << dendl;
       }
+      delete filter;
+      filter = NULL;
       break;
 
     case CEPH_OSD_OP_PGLS_FILTER:
@@ -1156,6 +1158,8 @@ void ReplicatedPG::do_pg_op(OpRequestRef op)
        dout(10) << " pgls result=" << result << " outdata.length()="
                 << osd_op.outdata.length() << dendl;
       }
+      delete filter;
+      filter = NULL;
       break;
 
     case CEPH_OSD_OP_PG_HITSET_LS:
@@ -1209,7 +1213,6 @@ void ReplicatedPG::do_pg_op(OpRequestRef op)
          }
          if (is_unreadable_object(oid)) {
            wait_for_unreadable_object(oid, op);
-           delete filter;
            return;
          }
          result = osd->store->read(coll, oid, 0, 0, osd_op.outdata);