8 #include <so_5_extra/error_ranges.hpp> 10 #include <so_5/impl/msg_tracing_helpers.hpp> 11 #include <so_5/impl/message_limit_internals.hpp> 12 #include <so_5/impl/agent_ptr_compare.hpp> 14 #include <so_5/details/sync_helpers.hpp> 16 #include <so_5/mbox.hpp> 17 #include <so_5/send_functions.hpp> 19 #include <so_5/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 )
override 155 m_env.get().error_logger().log(
157 "Time of shutdown operation is elapsed. " 158 "Application will be terminated." );
168 SO_5_THROW_EXCEPTION( rc_not_implemented,
169 "set_delivery_filter is not implemented for " 170 "time_elapsed_mbox" );
215 agent_t * subscriber,
216 const message_limit::control_block_t * limits )
229 return ::so_5::impl::special_agent_ptr_compare(
230 *m_subscriber, *(o.m_subscriber) );
292 outliving_reference_t< holder_t > status )
297 current()
const noexcept {
return m_status.get().current(); }
302 m_status.get().m_status = new_status;
350 mbox_t time_elapsed_mbox,
351 std::chrono::steady_clock::duration max_shutdown_time )
369 template<
typename Lock_Type,
typename Tracing_Base >
373 ,
private Tracing_Base
376 template<
typename... Tracing_Base_Args >
379 outliving_reference_t< environment_t > env,
381 mbox_t time_elapsed_mbox,
383 std::chrono::steady_clock::duration max_shutdown_time,
387 Tracing_Base_Args && ...tracing_args )
408 const std::type_index & type_index,
409 const message_limit::control_block_t * limit,
410 agent_t & subscriber )
override 420 const std::type_index & type_index,
421 agent_t & subscriber )
override 436 ss <<
"<mbox:type=MPMC:shutdowner:id=" <<
m_id <<
">";
448 const std::type_index & msg_type,
449 const message_ref_t & message,
450 unsigned int )
override 460 const std::type_index & msg_type,
466 "unable to set delivery filter to shutdowner mbox" );
507 "only shutdown_initiated_t message type is allowed to " 508 "be used with shutdowner mbox" );
517 const message_limit::control_block_t * limit,
518 agent_t & subscriber )
523 "a creation of new subscription is disabled during " 524 "shutdown procedure" );
584 const std::type_index & msg_type,
585 const message_ref_t & message )
610 const std::type_index & msg_type,
611 const message_ref_t & message )
718 template<
typename Lock_Type >
725 std::chrono::steady_clock::duration shutdown_time )
849 template<
typename Lock_Type =
std::
mutex >
891 layer( ::so_5::environment_t & env )
893 return *(env.query_layer< ::so_5::extra::shutdowner::layer_t >());
Ranges for error codes of each submodules.