8 #include <so_5_extra/error_ranges.hpp> 10 #include <so_5/rt/impl/h/msg_tracing_helpers.hpp> 11 #include <so_5/rt/impl/h/message_limit_internals.hpp> 12 #include <so_5/rt/impl/h/agent_ptr_compare.hpp> 14 #include <so_5/details/h/sync_helpers.hpp> 16 #include <so_5/rt/h/mbox.hpp> 17 #include <so_5/rt/h/send_functions.hpp> 19 #include <so_5/h/outliving.hpp> 78 so_5::send< shutdown_initiated_t >( m_notify_mbox );
85 struct shutdown_time_elapsed_t
final :
public so_5::message_t {};
101 outliving_reference_t< environment_t > env,
120 SO_5_THROW_EXCEPTION( rc_not_implemented,
121 "subscribe_event_handler is not implemented for " 122 "time_elapsed_mbox" );
130 SO_5_THROW_EXCEPTION( rc_not_implemented,
131 "subscribe_event_handler is not implemented for " 132 "time_elapsed_mbox" );
138 std::ostringstream ss;
139 ss <<
"<mbox:type=MPSC:shutdowner_time_elapsed:id=" << m_id <<
">";
146 return mbox_type_t::multi_producer_single_consumer;
153 unsigned int )
const override 155 m_env.get().error_logger().log(
157 "Time of shutdown operation is elapsed. " 158 "Application will be terminated." );
166 unsigned int )
const override 168 SO_5_THROW_EXCEPTION( rc_not_implemented,
169 "do_deliver_service_request is not implemented for " 170 "time_elapsed_mbox" );
179 SO_5_THROW_EXCEPTION( rc_not_implemented,
180 "set_delivery_filter is not implemented for " 181 "time_elapsed_mbox" );
220 agent_t * subscriber,
221 const message_limit::control_block_t * limits )
234 return ::so_5::impl::special_agent_ptr_compare(
235 *m_subscriber, *(o.m_subscriber) );
297 outliving_reference_t< holder_t > status )
302 current()
const {
return m_status.get().current(); }
307 m_status.get().m_status = new_status;
355 mbox_t time_elapsed_mbox,
356 std::chrono::steady_clock::duration max_shutdown_time )
374 template<
typename Lock_Type,
typename Tracing_Base >
378 ,
private Tracing_Base
381 template<
typename... Tracing_Base_Args >
384 outliving_reference_t< environment_t > env,
386 mbox_t time_elapsed_mbox,
388 std::chrono::steady_clock::duration max_shutdown_time,
392 Tracing_Base_Args && ...tracing_args )
413 const std::type_index & type_index,
414 const message_limit::control_block_t * limit,
415 agent_t * subscriber )
override 425 const std::type_index & type_index,
426 agent_t * subscriber )
override 441 ss <<
"<mbox:type=MPMC:shutdowner:id=" <<
m_id <<
">";
453 const std::type_index & msg_type,
454 const message_ref_t & message,
455 unsigned int )
const override 465 const std::type_index & msg_type,
467 unsigned int )
const override 471 "do_deliver_service_request is not implemented for " 477 const std::type_index & msg_type,
483 "unable to set delivery filter to shutdowner mbox" );
524 "only shutdown_initiated_t message type is allowed to " 525 "be used with shutdowner mbox" );
534 const message_limit::control_block_t * limit,
535 agent_t * subscriber )
540 "a creation of new subscription is disabled during " 541 "shutdown procedure" );
610 const std::type_index & msg_type,
611 const message_ref_t & message )
const 641 const std::type_index & msg_type,
642 const message_ref_t & message )
const 756 template<
typename Lock_Type >
763 std::chrono::steady_clock::duration shutdown_time )
887 template<
typename Lock_Type =
std::
mutex >
929 layer( ::so_5::environment_t & env )
931 return *(env.query_layer< ::so_5::extra::shutdowner::layer_t >());
Ranges for error codes of each submodules.