From 232227035c8d6a31eaaf193863cbadda949c08fd Mon Sep 17 00:00:00 2001
From: liuxiaolong <liuxiaolong@aiotlink.com>
Date: 星期二, 20 七月 2021 20:19:26 +0800
Subject: [PATCH] fix memory leak
---
box/node_center.h | 33 ++++++++++++++++++++++++++++++++-
1 files changed, 32 insertions(+), 1 deletions(-)
diff --git a/box/node_center.h b/box/node_center.h
index 54f84c0..b6ceab5 100644
--- a/box/node_center.h
+++ b/box/node_center.h
@@ -18,6 +18,7 @@
#ifndef NODE_CENTER_KY67RJ1Q
#define NODE_CENTER_KY67RJ1Q
+#include "json.h"
#include "shm_socket.h"
#include <unordered_map>
@@ -188,12 +189,15 @@
void OnTimer();
// remote hosts records
- std::vector<std::string> FindRemoteSubClients(const Topic &topic);
+ std::set<std::string> FindRemoteSubClients(const Topic &topic) { return net_records_.FindSubHosts(topic); }
+ std::set<std::string> FindRemoteRPCServers(const Topic &topic) { return net_records_.FindRPCHosts(topic); }
+ void ParseNetInfo(ssjson::Json &info) { net_records_.ParseData(info); }
private:
void CheckNodes();
bool CanHeartbeat(const NodeInfo &node) { return Valid(node) || node.state_.flag_ == kStateOffline; }
void Publish(SharedMemory &shm, const Topic &topic, const std::string &content);
+ void Notify(const Topic &topic, NodeInfo &node);
void DoPublish(ShmSocket &sock, const Topic &topic, MsgI &msg);
Clients DoFindClients(const std::string &topic, bool from_remote);
bool Valid(const NodeInfo &node) { return node.state_.flag_ == kStateNormal; }
@@ -218,6 +222,33 @@
int64_t offline_time_;
int64_t kill_time_;
int64_t last_check_time_;
+
+ // net hosts info
+ class NetRecords
+ {
+ public:
+ typedef std::set<std::string> Hosts;
+ void ParseData(const ssjson::Json &input);
+ Hosts FindRPCHosts(const Topic &topic) { return FindHosts(topic, rpc_hosts_); }
+ Hosts FindSubHosts(const Topic &topic) { return FindHosts(topic, sub_hosts_); }
+
+ private:
+ typedef std::unordered_map<Topic, Hosts> TopicMap;
+ TopicMap sub_hosts_;
+ TopicMap rpc_hosts_;
+ Hosts FindHosts(const Topic &topic, const TopicMap &tmap)
+ {
+ auto pos = tmap.find(topic);
+ if (pos != tmap.end()) {
+ return pos->second;
+ } else {
+ return Hosts();
+ }
+ }
+ std::string host_id_;
+ std::string ip_;
+ };
+ NetRecords net_records_;
};
#endif // end of include guard: NODE_CENTER_KY67RJ1Q
--
Gitblit v1.8.0