Commit d5061b01 authored by Dominik Charousset's avatar Dominik Charousset

Fix detaching process in network::manager

parent 1608c0b8
...@@ -42,9 +42,7 @@ public: ...@@ -42,9 +42,7 @@ public:
} }
protected: protected:
void detach_from_parent() override { void detach_from(abstract_broker* ptr) override {
auto ptr = this->parent();
this->set_parent(nullptr);
ptr->erase(hdl_); ptr->erase(hdl_);
} }
......
...@@ -74,8 +74,8 @@ protected: ...@@ -74,8 +74,8 @@ protected:
/// Creates a message signalizing a disconnect to the parent. /// Creates a message signalizing a disconnect to the parent.
virtual message detach_message() = 0; virtual message detach_message() = 0;
/// Detaches this manager from its parent. /// Detaches this manager from `ptr`.
virtual void detach_from_parent() = 0; virtual void detach_from(abstract_broker* ptr) = 0;
private: private:
abstract_broker* parent_; abstract_broker* parent_;
......
...@@ -44,12 +44,14 @@ void manager::detach(bool invoke_disconnect_message) { ...@@ -44,12 +44,14 @@ void manager::detach(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();
set_parent(nullptr);
detach_from(ptr);
if (invoke_disconnect_message) { if (invoke_disconnect_message) {
auto ptr = mailbox_element::make(invalid_actor_addr, invalid_message_id, auto mptr = mailbox_element::make(invalid_actor_addr, invalid_message_id,
detach_message()); detach_message());
parent_->exec_single_event(ptr); ptr->exec_single_event(mptr);
} }
detach_from_parent();
} }
} }
......
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