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