This is an automated email from the ASF dual-hosted git repository. szaszm pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git
commit e812c3324d1c293a399eab0b5537ad6f42c1cc52 Author: Martin Zink <[email protected]> AuthorDate: Thu Oct 6 12:47:40 2022 +0200 MINIFICPP-1943 Fixing memory leak in NetworkInterfaceInfo Closes #1425 Signed-off-by: Marton Szasz <[email protected]> --- libminifi/include/utils/NetworkInterfaceInfo.h | 32 ++++++++++---------------- libminifi/src/utils/NetworkInterfaceInfo.cpp | 16 ++++--------- 2 files changed, 16 insertions(+), 32 deletions(-) diff --git a/libminifi/include/utils/NetworkInterfaceInfo.h b/libminifi/include/utils/NetworkInterfaceInfo.h index 12ac06211..5d8f7953e 100644 --- a/libminifi/include/utils/NetworkInterfaceInfo.h +++ b/libminifi/include/utils/NetworkInterfaceInfo.h @@ -32,12 +32,7 @@ typedef IP_ADAPTER_ADDRESSES_LH IP_ADAPTER_ADDRESSES; struct ifaddrs; #endif -namespace org { -namespace apache { -namespace nifi { -namespace minifi { - -namespace utils { +namespace org::apache::nifi::minifi::utils { class NetworkInterfaceInfo { public: NetworkInterfaceInfo(NetworkInterfaceInfo&& src) noexcept = default; @@ -49,17 +44,18 @@ class NetworkInterfaceInfo { explicit NetworkInterfaceInfo(const struct ifaddrs* ifa); #endif NetworkInterfaceInfo& operator=(NetworkInterfaceInfo&& other) noexcept = default; - const std::string& getName() const noexcept { return name_; } - bool hasIpV4Address() const noexcept { return !ip_v4_addresses_.empty(); } - bool hasIpV6Address() const noexcept { return !ip_v6_addresses_.empty(); } - bool isRunning() const noexcept { return running_; } - bool isLoopback() const noexcept { return loopback_; } - const std::vector<std::string>& getIpV4Addresses() const noexcept { return ip_v4_addresses_; } - const std::vector<std::string>& getIpV6Addresses() const noexcept { return ip_v6_addresses_; } + [[nodiscard]] const std::string& getName() const noexcept { return name_; } + [[nodiscard]] bool hasIpV4Address() const noexcept { return !ip_v4_addresses_.empty(); } + [[nodiscard]] bool hasIpV6Address() const noexcept { return !ip_v6_addresses_.empty(); } + [[nodiscard]] bool isRunning() const noexcept { return running_; } + [[nodiscard]] bool isLoopback() const noexcept { return loopback_; } + [[nodiscard]] const std::vector<std::string>& getIpV4Addresses() const noexcept { return ip_v4_addresses_; } + [[nodiscard]] const std::vector<std::string>& getIpV6Addresses() const noexcept { return ip_v6_addresses_; } // Traverses the ip addresses and merges them together based on the interface name - static std::vector<NetworkInterfaceInfo> getNetworkInterfaceInfos(std::function<bool(const NetworkInterfaceInfo&)> filter = { [](const NetworkInterfaceInfo&) { return true; } }, - const std::optional<uint32_t> max_interfaces = std::nullopt); + static std::vector<NetworkInterfaceInfo> getNetworkInterfaceInfos( + const std::function<bool(const NetworkInterfaceInfo&)>& filter = { [](const NetworkInterfaceInfo&) { return true; } }, + std::optional<uint32_t> max_interfaces = std::nullopt); private: void moveAddressesInto(NetworkInterfaceInfo& destination); @@ -71,8 +67,4 @@ class NetworkInterfaceInfo { bool loopback_; static std::shared_ptr<core::logging::Logger> logger_; }; -} /* namespace utils */ -} /* namespace minifi */ -} /* namespace nifi */ -} /* namespace apache */ -} /* namespace org */ +} // namespace org::apache::nifi::minifi::utils diff --git a/libminifi/src/utils/NetworkInterfaceInfo.cpp b/libminifi/src/utils/NetworkInterfaceInfo.cpp index 3384c6be5..fc9dc5753 100644 --- a/libminifi/src/utils/NetworkInterfaceInfo.cpp +++ b/libminifi/src/utils/NetworkInterfaceInfo.cpp @@ -32,11 +32,7 @@ #include <ifaddrs.h> #endif -namespace org { -namespace apache { -namespace nifi { -namespace minifi { -namespace utils { +namespace org::apache::nifi::minifi::utils { std::shared_ptr<core::logging::Logger> NetworkInterfaceInfo::logger_ = core::logging::LoggerFactory<NetworkInterfaceInfo>::getLogger(); @@ -87,7 +83,7 @@ struct HasName { }; } -std::vector<NetworkInterfaceInfo> NetworkInterfaceInfo::getNetworkInterfaceInfos(std::function<bool(const NetworkInterfaceInfo&)> filter, +std::vector<NetworkInterfaceInfo> NetworkInterfaceInfo::getNetworkInterfaceInfos(const std::function<bool(const NetworkInterfaceInfo&)>& filter, const std::optional<uint32_t> max_interfaces) { std::vector<NetworkInterfaceInfo> network_adapters; #ifdef WIN32 @@ -120,7 +116,7 @@ std::vector<NetworkInterfaceInfo> NetworkInterfaceInfo::getNetworkInterfaceInfos } #else struct ifaddrs* interface_addresses = nullptr; - auto cleanup = gsl::finally([interface_addresses] { freeifaddrs(interface_addresses); }); + auto cleanup = gsl::finally([&interface_addresses] { freeifaddrs(interface_addresses); }); if (getifaddrs(&interface_addresses) == -1) { logger_->log_error("getifaddrs failed: %s", std::strerror(errno)); return network_adapters; @@ -158,8 +154,4 @@ void NetworkInterfaceInfo::moveAddressesInto(NetworkInterfaceInfo& destination) move_append(std::move(ip_v6_addresses_), destination.ip_v6_addresses_); } -} /* namespace utils */ -} /* namespace minifi */ -} /* namespace nifi */ -} /* namespace apache */ -} /* namespace org */ +} // namespace org::apache::nifi::minifi::utils
