Commit 9f269a78 authored by Dominik Charousset's avatar Dominik Charousset

Fix possible segfault in manager

parent d32b78d0
...@@ -48,13 +48,15 @@ void manager::detach(execution_unit* ctx, bool invoke_disconnect_message) { ...@@ -48,13 +48,15 @@ void manager::detach(execution_unit* ctx, bool invoke_disconnect_message) {
CAF_LOG_TRACE(""); CAF_LOG_TRACE("");
if (! detached()) { if (! detached()) {
CAF_LOG_DEBUG("disconnect servant from broker"); CAF_LOG_DEBUG("disconnect servant from broker");
auto ptr = parent(); auto raw_ptr = parent();
set_parent(nullptr); // keep the strong reference until we go out of scope
detach_from(ptr); strong_actor_ptr ptr;
ptr.swap(parent_);
detach_from(raw_ptr);
if (invoke_disconnect_message) { if (invoke_disconnect_message) {
auto mptr = mailbox_element::make(nullptr, invalid_message_id, auto mptr = mailbox_element::make(nullptr, invalid_message_id,
{}, detach_message()); {}, detach_message());
ptr->exec_single_event(ctx, mptr); raw_ptr->exec_single_event(ctx, mptr);
} }
} }
} }
......
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