From cf05ea3d9f43e4e84d621e1f9d54cbef552b6e2b Mon Sep 17 00:00:00 2001
From: lichao <lichao@aiotlink.com>
Date: 星期二, 18 五月 2021 16:53:28 +0800
Subject: [PATCH] fix center init mutex.

---
 src/topic_node.h |   21 ++++++++++++++-------
 1 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/src/topic_node.h b/src/topic_node.h
index be82cf6..1dfbf43 100644
--- a/src/topic_node.h
+++ b/src/topic_node.h
@@ -86,7 +86,11 @@
 	{
 		class Impl
 		{
-			typedef std::unordered_map<Topic, Address> Records;
+			struct TimedRec {
+				Address addr_;
+				int64_t timestamp_;
+			};
+			typedef std::unordered_map<Topic, TimedRec> Records;
 			Records records_;
 
 		public:
@@ -94,15 +98,18 @@
 			{
 				auto pos = records_.find(topic);
 				if (pos != records_.end()) {
-					addr = pos->second;
-					return true;
-				} else {
-					return false;
+					if (NowSec() - pos->second.timestamp_ < NodeTimeoutSec() / 2) {
+						addr = pos->second.addr_;
+						return true;
+					} else {
+						LOG_TRACE() << "topic dest cache timeout.";
+					}
 				}
+				return false;
 			}
 			bool Store(const Topic &topic, const Address &addr)
 			{
-				records_[topic] = addr;
+				records_[topic] = {addr, NowSec()};
 				return true;
 			}
 		};
@@ -149,7 +156,7 @@
 	State state() const { return state_.load(); }
 	bool IsOnline() { return state() == eStateOnline; }
 	bool Init();
-	bool Valid() const { return !sockets_.empty(); }
+	bool Valid() const { return state() != eStateUninited; }
 	std::mutex mutex_;
 	MQId ssn_id_ = 0;
 	std::atomic<State> state_;

--
Gitblit v1.8.0