From 854c63136c4d3a195e2dc617cd7330650bbaf504 Mon Sep 17 00:00:00 2001
From: lichao <lichao@aiotlink.com>
Date: 星期三, 28 四月 2021 19:17:02 +0800
Subject: [PATCH] fix Cleanup and center online map not removed.

---
 box/center.cpp |    9 +++++++++
 src/bh_api.cpp |   13 +++++++++----
 2 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/box/center.cpp b/box/center.cpp
index 5cb9bc3..0952ca7 100644
--- a/box/center.cpp
+++ b/box/center.cpp
@@ -392,9 +392,18 @@
 		EraseMapRec(service_map_, node->services_);
 		EraseMapRec(subscribe_map_, node->subscriptions_);
 
+		// remove online record.
+		auto pos = online_node_addr_map_.find(node->proc_.proc_id());
+		if (pos != online_node_addr_map_.end()) {
+			if (node->addrs_.find(pos->second) != node->addrs_.end()) {
+				online_node_addr_map_.erase(pos);
+			}
+		}
+
 		for (auto &addr : node->addrs_) {
 			cleaner_(addr);
 		}
+
 		node->addrs_.clear();
 	}
 	std::string id_; // center proc id;
diff --git a/src/bh_api.cpp b/src/bh_api.cpp
index efa278e..c29afd9 100644
--- a/src/bh_api.cpp
+++ b/src/bh_api.cpp
@@ -8,11 +8,15 @@
 
 namespace
 {
-TopicNode &ProcNode()
+std::unique_ptr<TopicNode> &ProcNodePtr()
 {
 	static bool init = GlobalInit(BHomeShm());
-	static TopicNode node(BHomeShm());
-	return node;
+	static std::unique_ptr<TopicNode> ptr(new TopicNode(BHomeShm()));
+	return ptr;
+}
+TopicNode &ProcNode()
+{
+	return *ProcNodePtr();
 }
 
 class TmpPtr : private boost::noncopyable
@@ -322,7 +326,8 @@
 
 int BHCleanup()
 {
-	ProcNode().Stop();
+	ProcNodePtr().reset();
+	return 0;
 }
 
 int BHGetLastError(void **msg, int *msg_len)

--
Gitblit v1.8.0