From 13c503b73b4ecc8ce4a6e344f9ac15202985d686 Mon Sep 17 00:00:00 2001 From: liuxiaolong <liuxiaolong@aiotlink.com> Date: 星期二, 20 七月 2021 19:48:58 +0800 Subject: [PATCH] fix memory leak --- src/timed_queue.h | 53 +++++++++++++---------------------------------------- 1 files changed, 13 insertions(+), 40 deletions(-) diff --git a/src/timed_queue.h b/src/timed_queue.h index 14e318d..51da497 100644 --- a/src/timed_queue.h +++ b/src/timed_queue.h @@ -1,7 +1,7 @@ /* * ===================================================================================== * - * Filename: failed_msg.h + * Filename: timed_queue.h * * Description: * @@ -24,52 +24,25 @@ #include <string> template <class Data, class ClockType = std::chrono::steady_clock> -class TimedQueue +class TimedData { public: typedef ClockType Clock; typedef typename Clock::time_point TimePoint; typedef typename Clock::duration Duration; + TimedData(const TimePoint &expire, const Data &data) : + expire_(expire), data_(data) {} + TimedData(const TimePoint &expire, Data &&data) : + expire_(expire), data_(std::move(data)) {} + bool Expired() const { return Clock::now() > expire_; } + const TimePoint &expire() const { return expire_; } + Data &data() { return data_; } + Data const &data() const { return data_; } + private: - struct Record { - TimePoint expire_; - Data data_; - Record(const TimePoint &expire, const Data &data) : - expire_(expire), data_(data) {} - Record(const TimePoint &expire, Data &&data) : - expire_(expire), data_(std::move(data)) {} - bool Expired() { return Clock::now() > expire_; } - }; - typedef std::list<Record> Queue; - Synced<Queue> queue_; - -public: - void Push(Data &&data, const TimePoint &expire) { queue_->emplace_back(expire, std::move(data)); } - void Push(Data const &data, const TimePoint &expire) { queue_->emplace_back(expire, data); } - - void Push(Data &&data, Duration const &timeout) { Push(std::move(data), Clock::now() + timeout); } - void Push(Data const &data, Duration const &timeout) { Push(data, Clock::now() + timeout); } - - template <class Func> - void CheckAll(Func const &func) - { - queue_.Apply([&](Queue &q) { - if (q.empty()) { - return; - } - auto it = q.begin(); - do { - if (it->Expired()) { - it = q.erase(it); - } else if (func(it->data_)) { - it = q.erase(it); - } else { - ++it; - } - } while (it != q.end()); - }); - } + TimePoint expire_; + Data data_; }; #endif // end of include guard: TIMED_QUEUE_Y2YLRBS3 -- Gitblit v1.8.0