From a559ac0d4f34445eaafb416eb08440e5a2b2b0cf Mon Sep 17 00:00:00 2001 From: Yoon Date: Fri, 13 Apr 2018 14:12:11 +0900 Subject: [PATCH] Support multiple Latency Monitors - Fix a dangling pointer bug --- src/Conf.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Conf.cpp b/src/Conf.cpp index 3ed1941..ed76d78 100644 --- a/src/Conf.cpp +++ b/src/Conf.cpp @@ -42,7 +42,7 @@ void CustomCommandConf::init(CustomCommandConf&c, const char* name, const int ty } void CustomCommandConf::convert(const CustomCommandConf&c, Command &cmd) { - cmd.name = c.name.c_str(); + cmd.name = strdup(c.name.c_str()); cmd.minArgs = c.minArgs; cmd.maxArgs = c.maxArgs; cmd.mode = c.mode; @@ -136,7 +136,7 @@ void Conf::setGlobal(const ConfParser::Node* node) const ConfParser::Node* clusterServerPool = nullptr; const ConfParser::Node* sentinelServerPool = nullptr; const ConfParser::Node* dataCenter = nullptr; - const ConfParser::Node* latencyMonitor = nullptr; + std::vector latencyMonitors; for (auto p = node; p; p = p->next) { if (setStr(mName, "Name", p)) { } else if (setStr(mBind, "Bind", p)) { @@ -165,7 +165,7 @@ void Conf::setGlobal(const ConfParser::Node* node) } else if (setInt(mLogSample[LogLevel::Warn], "LogWarnSample", p)) { } else if (setInt(mLogSample[LogLevel::Error], "LogErrorSample", p)) { } else if (strcasecmp(p->key.c_str(), "LatencyMonitor") == 0) { - latencyMonitor = p; + latencyMonitors.push_back(p); } else if (strcasecmp(p->key.c_str(), "Authority") == 0) { authority = p; } else if (strcasecmp(p->key.c_str(), "ClusterServerPool") == 0) { @@ -197,7 +197,7 @@ void Conf::setGlobal(const ConfParser::Node* node) if (dataCenter) { setDataCenter(dataCenter); } - if (latencyMonitor) { + for (auto latencyMonitor : latencyMonitors) { mLatencyMonitors.push_back(LatencyMonitorConf{}); setLatencyMonitor(mLatencyMonitors.back(), latencyMonitor); }