예제 #1
0
		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();
		}
예제 #2
0
		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();
		}
예제 #3
0
		void
		so_evt_start()
		{
			try_start_new_iteration();
		}
예제 #4
0
		void
		evt_next_iteration()
		{
			try_start_new_iteration();
		}