You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by sz...@apache.org on 2022/10/06 10:53:23 UTC

[nifi-minifi-cpp] 03/04: MINIFICPP-1943 Fixing memory leak in NetworkInterfaceInfo

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 <ma...@apache.org>
AuthorDate: Thu Oct 6 12:47:40 2022 +0200

    MINIFICPP-1943 Fixing memory leak in NetworkInterfaceInfo
    
    Closes #1425
    Signed-off-by: Marton Szasz <sz...@apache.org>
---
 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