292 std::type_index msg_type,
294 underlying_counter_t limit,
296 Tracing_Args &&... args )
297 : Tracing_Base{ std::forward< Tracing_Args >(args)... }
298 , m_underlying_mbox{ dest_mbox.value() }
299 , m_msg_type{ std::move(msg_type) }
301 , m_instances_counter{ std::make_shared< instances_counter_t >() }
351 message_delivery_mode_t delivery_mode,
352 const std::type_index & msg_type,
353 const message_ref_t & message,
354 unsigned int redirection_deep )
override
356 ensure_expected_msg_type(
358 "an attempt to deliver message of a different message type" );
360 typename Tracing_Base::deliver_op_tracer tracer{
365 msg_type, message, redirection_deep };
369 counter_incrementer_t incrementer{
370 outliving_mutable( *m_instances_counter )
372 if( incrementer.value() <= m_limit )
376 message_ref_t our_envelope{
377 std::make_unique< special_envelope_t >(
379 m_instances_counter )
384 incrementer.do_not_decrement_in_destructor();
387 m_underlying_mbox->do_deliver_message(
395 using namespace so_5::impl::msg_tracing_helpers::details::
396 extra_inflight_limit_specifics;
399 "too_many_inflight_messages",
400 limit_info{ m_limit, incrementer.value() } );
406 const std::type_index & msg_type,
407 const delivery_filter_t & filter,
408 abstract_message_sink_t & subscriber )
override
410 ensure_expected_msg_type(
412 "an attempt to set delivery_filter for different "
415 m_underlying_mbox->set_delivery_filter(