]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
common/pick_address: use scope_guard for freeifaddrs()
authorKefu Chai <kchai@redhat.com>
Fri, 26 Mar 2021 10:34:32 +0000 (18:34 +0800)
committerKefu Chai <kchai@redhat.com>
Thu, 13 May 2021 01:25:32 +0000 (09:25 +0800)
for better readability

Signed-off-by: Kefu Chai <kchai@redhat.com>
(cherry picked from commit c3c110b5763ac420c4b88f8a545c1c87a71ce59a)

src/common/pick_address.cc

index e6da4248b5017c2c629b9eb14184026097ada5f2..2a756facaee148a9079753f9cc847054521ec254 100644 (file)
@@ -14,6 +14,7 @@
 
 #include "common/pick_address.h"
 #include "include/ipaddr.h"
+#include "include/scope_guard.h"
 #include "include/str_list.h"
 #include "common/ceph_context.h"
 #ifndef WITH_SEASTAR
@@ -187,8 +188,6 @@ static void fill_in_one_address(CephContext *cct,
 
 void pick_addresses(CephContext *cct, int needs)
 {
-  struct ifaddrs *ifa;
-  int r = getifaddrs(&ifa);
   auto public_addr = cct->_conf.get_val<entity_addr_t>("public_addr");
   auto public_network = cct->_conf.get_val<std::string>("public_network");
   auto public_network_interface =
@@ -198,11 +197,14 @@ void pick_addresses(CephContext *cct, int needs)
   auto cluster_network_interface =
     cct->_conf.get_val<std::string>("cluster_network_interface");
 
+  struct ifaddrs *ifa;
+  int r = getifaddrs(&ifa);
   if (r < 0) {
     string err = cpp_strerror(errno);
     lderr(cct) << "unable to fetch interfaces and addresses: " << err << dendl;
     exit(1);
   }
+  auto free_ifa = make_scope_guard([ifa] { freeifaddrs(ifa); });
 
   if ((needs & CEPH_PICK_ADDRESS_PUBLIC) &&
     public_addr.is_blank_ip() && !public_network.empty()) {
@@ -223,8 +225,6 @@ void pick_addresses(CephContext *cct, int needs)
       }
     }
   }
-
-  freeifaddrs(ifa);
 }
 #endif // !WITH_SEASTAR
 
@@ -486,8 +486,8 @@ bool have_local_addr(CephContext *cct, const list<entity_addr_t>& ls, entity_add
     lderr(cct) << "unable to fetch interfaces and addresses: " << cpp_strerror(errno) << dendl;
     exit(1);
   }
+  auto free_ifa = make_scope_guard([ifa] { freeifaddrs(ifa); });
 
-  bool found = false;
   for (struct ifaddrs *addrs = ifa; addrs != nullptr; addrs = addrs->ifa_next) {
     if (addrs->ifa_addr) {
       entity_addr_t a;
@@ -495,16 +495,12 @@ bool have_local_addr(CephContext *cct, const list<entity_addr_t>& ls, entity_add
       for (auto& p : ls) {
         if (a.is_same_host(p)) {
           *match = p;
-          found = true;
-          goto out;
+          return true;
         }
       }
     }
   }
-
- out:
-  freeifaddrs(ifa);
-  return found;
+  return false;
 }
 
 int get_iface_numa_node(