void evt_child_destroyed( const so_5::rt::msg_coop_deregistered & ) { if( m_state != state_t::awaiting_destroying ) throw std::runtime_error( "msg_coop_deregistered when " "m_state != state_t::awaiting_destroying" ); if( m_destroy_received != m_max_agents ) throw std::runtime_error( "not all agents destroyed before " "msg_coop_deregistered received" ); // This action must not lead to any damages (like memory leaks). for( auto & m : m_child_mboxes ) m->deliver_signal< msg_ping >(); --m_iterations_left; try_start_new_iteration(); }
void evt_child_destroyed( const so_5::msg_coop_deregistered & ) { if( m_state != state_t::awaiting_destroying ) throw std::runtime_error( "msg_coop_deregistered when " "m_state != state_t::awaiting_destroying" ); if( m_destroy_received != m_max_agents ) throw std::runtime_error( "not all agents destroyed before " "msg_coop_deregistered received" ); // This action must not lead to any damages (like memory leaks). consume_some_memory(); run_with_time_limit( [this] { for( auto & m : m_child_mboxes ) m->deliver_signal< msg_ping >(); }, 10, "attempts to send signal to MPSC mbox of destroyed agent" ); --m_iterations_left; try_start_new_iteration(); }
void so_evt_start() { try_start_new_iteration(); }
void evt_next_iteration() { try_start_new_iteration(); }