Commit 08c85d65 authored by Dominik Charousset's avatar Dominik Charousset

Kill all proxies in basp_broker::on_exit

parent 667a5950
...@@ -110,6 +110,23 @@ class actor_namespace { ...@@ -110,6 +110,23 @@ class actor_namespace {
*/ */
bool empty() const; bool empty() const;
/**
* Deletes all proxies.
*/
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: private:
backend& m_backend; backend& m_backend;
std::map<key_type, proxy_map> m_proxies; std::map<key_type, proxy_map> m_proxies;
......
...@@ -149,4 +149,8 @@ void actor_namespace::erase(const key_type& inf, actor_id aid) { ...@@ -149,4 +149,8 @@ void actor_namespace::erase(const key_type& inf, actor_id aid) {
} }
} }
void actor_namespace::clear() {
m_proxies.clear();
}
} // namespace caf } // namespace caf
...@@ -695,6 +695,12 @@ actor_proxy_ptr basp_broker::make_proxy(const node_id& nid, actor_id aid) { ...@@ -695,6 +695,12 @@ actor_proxy_ptr basp_broker::make_proxy(const node_id& nid, actor_id aid) {
void basp_broker::on_exit() { void basp_broker::on_exit() {
CAF_LOG_TRACE(""); CAF_LOG_TRACE("");
// kill all remaining proxies
m_namespace.for_each([](const actor_proxy_ptr& ptr) {
ptr->kill_proxy(exit_reason::remote_link_unreachable);
});
m_namespace.clear();
// remove all remaining state
m_ctx.clear(); m_ctx.clear();
m_acceptors.clear(); m_acceptors.clear();
m_open_ports.clear(); m_open_ports.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