void forwarding_actor_proxy::enqueue(mailbox_element_ptr what, execution_unit*) { CAF_PUSH_AID(0); CAF_ASSERT(what); forward_msg(std::move(what->sender), what->mid, what->move_content_to_message(), &what->stages); }
void private_thread::run() { auto job = const_cast<scheduled_actor*>(self_); CAF_PUSH_AID(job->id()); CAF_LOG_TRACE(""); scoped_execution_unit ctx{&job->system()}; auto max_throughput = std::numeric_limits<size_t>::max(); bool resume_later; for (;;) { state_ = await_resume_or_shutdown; do { resume_later = false; switch (job->resume(&ctx, max_throughput)) { case resumable::resume_later: resume_later = true; break; case resumable::done: intrusive_ptr_release(job->ctrl()); return; case resumable::awaiting_message: intrusive_ptr_release(job->ctrl()); break; case resumable::shutdown_execution_unit: return; } } while (resume_later); // wait until actor becomes ready again or was destroyed if (!await_resume()) return; } }
void abstract_broker::launch(execution_unit* eu, bool is_lazy, bool is_hidden) { CAF_ASSERT(eu != nullptr); CAF_ASSERT(eu == &backend()); // add implicit reference count held by middleman/multiplexer if (!is_hidden) register_at_system(); CAF_PUSH_AID(id()); CAF_LOG_TRACE("init and launch broker:" << CAF_ARG(id())); if (is_lazy && mailbox().try_block()) return; intrusive_ptr_add_ref(ctrl()); eu->exec_later(this); }
void abstract_broker::launch(execution_unit*, bool, bool is_hidden) { // add implicit reference count held by the middleman ref(); is_registered(! is_hidden); CAF_PUSH_AID(id()); CAF_LOGF_TRACE("init and launch broker with ID " << id()); // we want to make sure initialization is executed in MM context do_become( [=](sys_atom) { CAF_LOGF_TRACE("ID " << id()); bhvr_stack_.pop_back(); // launch backends now, because user-defined initialization // might call functions like add_connection for (auto& kvp : doormen_) { kvp.second->launch(); } initialize(); }, true); enqueue(invalid_actor_addr, invalid_message_id, make_message(sys_atom::value), nullptr); }
void abstract_broker::enqueue(mailbox_element_ptr ptr, execution_unit*) { CAF_PUSH_AID(id()); scheduled_actor::enqueue(std::move(ptr), &backend()); }