Commit 0f8b1e4a authored by Dominik Charousset's avatar Dominik Charousset

Abort stream when receiving exit_reason::kill

parent e9398439
...@@ -583,11 +583,24 @@ scheduled_actor::categorize(mailbox_element& x) { ...@@ -583,11 +583,24 @@ scheduled_actor::categorize(mailbox_element& x) {
auto em = content.move_if_unshared<exit_msg>(0); auto em = content.move_if_unshared<exit_msg>(0);
// make sure to get rid of attachables if they're no longer needed // make sure to get rid of attachables if they're no longer needed
unlink_from(em.source); unlink_from(em.source);
// exit_reason::kill is always fatal // exit_reason::kill is always fatal and also aborts streams.
if (em.reason == exit_reason::kill) if (em.reason == exit_reason::kill) {
quit(std::move(em.reason)); quit(std::move(em.reason));
else std::vector<stream_manager_ptr> xs;
for (auto& kvp : stream_managers_)
xs.emplace_back(kvp.second);
for (auto& kvp : pending_stream_managers_)
xs.emplace_back(kvp.second);
std::sort(xs.begin(), xs.end());
auto last = std::unique(xs.begin(), xs.end());
std::for_each(xs.begin(), last, [&](stream_manager_ptr& mgr) {
mgr->stop(exit_reason::kill);
});
stream_managers_.clear();
pending_stream_managers_.clear();
} else {
call_handler(exit_handler_, this, em); call_handler(exit_handler_, this, em);
}
return message_category::internal; return message_category::internal;
} }
case make_type_token<down_msg>(): { case make_type_token<down_msg>(): {
......
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