entity_name_t my_name;
/// my addr
- mutable_item_history<entity_addrvec_t> my_addrs;
+ safe_item_history<entity_addrvec_t> my_addrs;
int default_send_priority;
/// set to true once the Messenger has started, and set to false on shutdown
if (get_myaddrs().front().get_port() == 0) {
set_myaddrs(listen_addrs);
}
- for (auto& a : my_addrs->v) {
+ entity_addrvec_t newaddrs = *my_addrs;
+ for (auto& a : newaddrs.v) {
a.set_nonce(nonce);
}
+ set_myaddrs(newaddrs);
init_local_connection();
stopped = false;
if (!did_bind) {
- for (auto& a : my_addrs->v) {
+ entity_addrvec_t newaddrs = *my_addrs;
+ for (auto& a : newaddrs.v) {
a.nonce = nonce;
}
+ set_myaddrs(newaddrs);
_init_local_connection();
}
bool ret = false;
Mutex::Locker l(lock);
- for (auto& a : my_addrs->v) {
+ entity_addrvec_t newaddrs = *my_addrs;
+ for (auto& a : newaddrs.v) {
if (a.is_blank_ip()) {
int port = a.get_port();
for (auto& b : addrs.v) {
}
}
}
+ set_myaddrs(newaddrs);
if (ret) {
_init_local_connection();
}
ldout(cct,10) << __func__ << " had no addrs" << dendl;
} else {
// fix all addrs of the same family, regardless of type (msgr2 vs legacy)
- for (auto& a : my_addrs->v) {
+ entity_addrvec_t newaddrs = *my_addrs;
+ for (auto& a : newaddrs.v) {
if (a.get_family() == peer_addr_for_me.get_family()) {
entity_addr_t t = peer_addr_for_me;
t.set_type(a.get_type());
a = t;
}
}
+ set_myaddrs(newaddrs);
}
ldout(cct, 1) << __func__ << " learned my addr " << *my_addrs
<< " (peer_addr_for_me " << peer_addr_for_me << ")" << dendl;
// adjust the nonce; we want our entity_addr_t to be truly unique.
nonce += 1000000;
- msgr->my_addr.nonce = nonce;
- msgr->my_addrs->v[0].nonce = nonce;
+ entity_addrvec_t newaddrs = *msgr->my_addrs;
+ newaddrs.v[0].nonce = nonce;
+ msgr->set_myaddrs(newaddrs);
ldout(msgr->cct,10) << __func__ << " new nonce " << nonce << " and addr "
<< msgr->my_addr << dendl;