From: Kefu Chai Date: Fri, 26 Mar 2021 10:34:32 +0000 (+0800) Subject: common/pick_address: use scope_guard for freeifaddrs() X-Git-Tag: v17.1.0~2391^2~2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=c3c110b5763ac420c4b88f8a545c1c87a71ce59a;p=ceph.git common/pick_address: use scope_guard for freeifaddrs() for better readability Signed-off-by: Kefu Chai --- diff --git a/src/common/pick_address.cc b/src/common/pick_address.cc index a17b6a349dc89..ced5abad84ce5 100644 --- a/src/common/pick_address.cc +++ b/src/common/pick_address.cc @@ -209,8 +209,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 = @@ -220,11 +218,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()) { @@ -245,8 +246,6 @@ void pick_addresses(CephContext *cct, int needs) } } } - - freeifaddrs(ifa); } #endif // !WITH_SEASTAR @@ -503,8 +502,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; @@ -512,16 +511,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(