]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
common: fix memory leaks in WeightedPriorityQueue. 25296/head
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Fri, 28 Sep 2018 12:57:10 +0000 (14:57 +0200)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Tue, 27 Nov 2018 23:53:45 +0000 (00:53 +0100)
Fixes: http://tracker.ceph.com/issues/36248
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
(cherry picked from commit 61395d44010f0ac1c183d030b244ae1ec0c8b99a)

src/common/WeightedPriorityQueue.h

index 64ac120bfa88a8469ad1683690d48e20dc0fdf2d..fa463b4c404983ef204cbd8c107d443f602b232e 100644 (file)
@@ -67,8 +67,11 @@ class WeightedPriorityQueue :  public OpQueue <T, K>
         K key;         // klass
         ListPairs lp;
         Klass(K& k) :
-          key(k)
-          {}
+          key(k) {
+        }
+        ~Klass() {
+          lp.clear_and_dispose(DelItem<ListPair>());
+        }
       friend bool operator< (const Klass &a, const Klass &b)
         { return a.key < b.key; }
       friend bool operator> (const Klass &a, const Klass &b)
@@ -129,8 +132,11 @@ class WeightedPriorityQueue :  public OpQueue <T, K>
        Kit next;
        SubQueue(unsigned& p) :
          key(p),
-         next(klasses.begin())
-         {}
+         next(klasses.begin()) {
+       }
+       ~SubQueue() {
+         klasses.clear_and_dispose(DelItem<Klass>());
+       }
       friend bool operator< (const SubQueue &a, const SubQueue &b)
         { return a.key < b.key; }
       friend bool operator> (const SubQueue &a, const SubQueue &b)
@@ -195,8 +201,11 @@ class WeightedPriorityQueue :  public OpQueue <T, K>
        Queue() :
          total_prio(0),
          max_cost(0),
-         size(0)
-         {}
+         size(0) {
+       }
+       ~Queue() {
+         queues.clear_and_dispose(DelItem<SubQueue>());
+       }
        bool empty() const {
          return !size;
        }