From b379d771d7a0fb13ac482738f182c6d000440b6a Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Fri, 26 Mar 2021 18:34:32 +0800 Subject: [PATCH] common/pick_address: use scope_guard for freeifaddrs() for better readability Signed-off-by: Kefu Chai (cherry picked from commit c3c110b5763ac420c4b88f8a545c1c87a71ce59a) --- src/common/pick_address.cc | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/src/common/pick_address.cc b/src/common/pick_address.cc index a2b72371eec2a..730157031f21b 100644 --- a/src/common/pick_address.cc +++ b/src/common/pick_address.cc @@ -193,8 +193,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("public_addr"); auto public_network = cct->_conf.get_val("public_network"); auto public_network_interface = @@ -204,11 +202,14 @@ void pick_addresses(CephContext *cct, int needs) auto cluster_network_interface = cct->_conf.get_val("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()) { @@ -229,8 +230,6 @@ void pick_addresses(CephContext *cct, int needs) } } } - - freeifaddrs(ifa); } #endif // !WITH_SEASTAR @@ -492,8 +491,8 @@ bool have_local_addr(CephContext *cct, const std::list& ls, entit 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; @@ -501,16 +500,12 @@ bool have_local_addr(CephContext *cct, const std::list& ls, entit 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( -- 2.39.5