Commit dbe880af authored by Dominik Charousset's avatar Dominik Charousset

Do not iterate namespace while changing it

parent 08c85d65
......@@ -78,6 +78,11 @@ class actor_namespace {
*/
size_t count_proxies(const key_type& node);
/**
* Returns all proxies for `node`.
*/
std::vector<actor_proxy_ptr> get_all();
/**
* Returns all proxies for `node`.
*/
......@@ -115,18 +120,6 @@ class actor_namespace {
*/
void clear();
template <class F>
void for_each(F fun) {
for (auto& outer : m_proxies) {
for (auto& inner : outer.second) {
auto ptr = inner.second->get();
if (ptr) {
fun(ptr);
}
}
}
}
private:
backend& m_backend;
std::map<key_type, proxy_map> m_proxies;
......
......@@ -87,13 +87,26 @@ size_t actor_namespace::count_proxies(const key_type& node) {
return (i != m_proxies.end()) ? i->second.size() : 0;
}
std::vector<actor_proxy_ptr> actor_namespace::get_all() {
std::vector<actor_proxy_ptr> result;
for (auto& outer : m_proxies) {
for (auto& inner : outer.second) {
auto ptr = inner.second->get();
if (ptr) {
result.push_back(std::move(ptr));
}
}
}
return result;
}
std::vector<actor_proxy_ptr> actor_namespace::get_all(const key_type& node) {
std::vector<actor_proxy_ptr> result;
auto& submap = m_proxies[node];
for (auto& kvp : submap) {
auto ptr = kvp.second->get();
if (ptr) {
result.push_back(ptr);
result.push_back(std::move(ptr));
}
}
return result;
......
......@@ -696,9 +696,11 @@ actor_proxy_ptr basp_broker::make_proxy(const node_id& nid, actor_id aid) {
void basp_broker::on_exit() {
CAF_LOG_TRACE("");
// kill all remaining proxies
m_namespace.for_each([](const actor_proxy_ptr& ptr) {
ptr->kill_proxy(exit_reason::remote_link_unreachable);
});
auto proxies = m_namespace.get_all();
for (auto& proxy : proxies) {
CAF_REQUIRE(proxy != nullptr);
proxy->kill_proxy(exit_reason::remote_link_unreachable);
}
m_namespace.clear();
// remove all remaining state
m_ctx.clear();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment