2
3
6
7
8
9
13#include <so_5/impl/coop_private_iface.hpp>
14#include <so_5/impl/internal_env_iface.hpp>
16#include <so_5/coop.hpp>
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
52
53
54
55
56
57
58
62
63
64
65
66
67
71
72
73
74
75
76
77
78
91 std::
cerr <<
"*** ~final_dereg_chain_holder_t: "
92 "unexpected m_final_dereg_chain_size: "
115 ++m_final_dereg_chain_size;
116 if( !m_final_dereg_chain_head )
117 m_final_dereg_chain_head = coop;
118 if( m_final_dereg_chain_tail )
119 coop_private_iface_t::set_next_in_final_dereg_chain(
120 *m_final_dereg_chain_tail,
122 m_final_dereg_chain_tail = std::move(coop);
129 return m_final_dereg_chain_size;
136 return !
static_cast<
bool>( m_final_dereg_chain_head );
143 coop_shptr_t head = std::exchange(
144 m_final_dereg_chain_head,
146 m_final_dereg_chain_tail = coop_shptr_t{};
147 m_final_dereg_chain_size = 0u;
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
180 coop_private_iface_t::giveout_next_in_final_dereg_chain(
182 auto & env = head->environment();
183 internal_env_iface_t{ env }.final_deregister_coop(
186 head = std::move(next);
Type of smart handle for a cooperation.
A special type that plays role of unique_ptr for coop.
void start_deregistration()
Initiate start of the cooperation deregistration.
void ready_to_deregister_notify(coop_shptr_t coop)
Notification about readiness of the cooperation deregistration.
std::condition_variable m_final_dereg_chain_cond
Notification object to inform that the chain of coops for the final deregistration isn't empty anymor...
bool final_deregister_coop(coop_shptr_t coop) noexcept
Do final actions of the cooperation deregistration.
void process_current_final_dereg_chain(std::unique_lock< std::mutex > &lck) noexcept
Method that performs the final deregistration for coops in the m_final_dereg_chain.
so_5::impl::final_dereg_chain_holder_t m_final_dereg_chain
The chain of coops for the final deregistration.
std::mutex m_final_dereg_chain_lock
Lock object for thread-safety of the chain of coops ready for the final deregistration.
coop_repo_t(outliving_reference_t< environment_t > env, coop_listener_unique_ptr_t coop_listener)
Initializing constructor.
void wait_all_coop_to_deregister()
Wait for end of all cooperations deregistration.
void start()
Do initialization.
void final_dereg_thread_body()
Method that implements the body of final deregistration thread.
std::condition_variable m_deregistration_started_cond
Condition variable for the deregistration start indication.
bool m_final_dereg_thread_shutdown_flag
The flag for shutting down the final deregistration thread.
std::condition_variable m_deregistration_finished_cond
Condition variable for the deregistration finish indication.
environment_infrastructure_t::coop_repository_stats_t query_stats()
Get the current statistic for run-time monitoring.
std::thread m_final_dereg_thread
A separate thread for doing the final deregistration.
void finish()
Finish work.
void wait_for_start_deregistration()
Wait for a signal about start of the cooperation deregistration.
Default implementation of multithreaded environment infrastructure.
so_5::timer_id_t schedule_timer(const std::type_index &type_wrapper, const message_ref_t &msg, const mbox_t &mbox, std::chrono::steady_clock::duration pause, std::chrono::steady_clock::duration period) override
Initiate a timer (delayed or periodic message).
::so_5::stats::repository_t & stats_repository() noexcept override
Get stats repository for the environment.
coop_repo_t m_coop_repo
Repository of registered cooperations.
const environment_params_t::default_disp_params_t m_default_dispatcher_params
Parameters for the default dispatcher.
timer_thread_stats_t query_timer_thread_stats() override
Query run-time statistics for timer (thread or manager).
void single_timer(const std::type_index &type_wrapper, const message_ref_t &msg, const mbox_t &mbox, std::chrono::steady_clock::duration pause) override
Initiate a delayed message.
void stop() noexcept override
Initiate a signal for shutdown of Environment.
coop_handle_t register_coop(coop_unique_holder_t coop) override
Register new cooperation.
::so_5::stats::controller_t & stats_controller() noexcept override
Get stats controller for the environment.
void ready_to_deregister_notify(coop_shptr_t coop) noexcept override
void run_user_supplied_init_and_wait_for_stop(env_init_t init_fn)
timer_thread_unique_ptr_t m_timer_thread
Timer thread to be used by the environment.
bool final_deregister_coop(coop_shptr_t coop_name) noexcept override
Do final actions of the cooperation deregistration.
void launch(env_init_t init_fn) override
Do actual launch of SObjectizer's Environment.
default_dispatcher_holder_t m_default_dispatcher
Default dispatcher.
void run_agent_core_and_go_further(env_init_t init_fn)
mt_env_infrastructure_t(environment_t &env, environment_params_t::default_disp_params_t default_disp_params, timer_thread_unique_ptr_t timer_thread, coop_listener_unique_ptr_t coop_listener, mbox_t stats_distribution_mbox)
Initializing constructor.
coop_unique_holder_t make_coop(coop_handle_t parent, disp_binder_shptr_t default_binder) override
Create an instance of a new coop.
coop_repository_stats_t query_coop_repository_stats() override
Query run-time statistics for cooperation repository.
void run_timer_thread_and_go_further(env_init_t init_fn)
::so_5::stats::impl::std_controller_t m_stats_controller
Run-time stats controller to be used by the environment.
environment_t & m_env
SOEnv for that this infrastructure was created.
void run_default_dispatcher_and_go_further(env_init_t init_fn)
disp_binder_shptr_t make_default_disp_binder() override
Create a binder for the default dispatcher.
An interface for environment_infrastructure entity.
A basic part for various implementations of coop_repository.
void deregister_all_coop() noexcept
Deregisted all cooperations.
environment_infrastructure_t::coop_repository_stats_t query_stats()
Get the current statistic for run-time monitoring.
try_switch_to_shutdown_result_t try_switch_to_shutdown() noexcept
Try to switch repository to shutdown state.
Helper class for holding the current chain of coops for the final deregistration.
final_dereg_chain_holder_t & operator=(const final_dereg_chain_holder_t &)=delete
~final_dereg_chain_holder_t()=default
final_dereg_chain_holder_t(const final_dereg_chain_holder_t &)=delete
final_dereg_chain_holder_t & operator=(final_dereg_chain_holder_t &&)=delete
coop_shptr_t m_final_dereg_chain_tail
The tail of the chain of coops for the final deregistration.
std::size_t size() const noexcept
final_dereg_chain_holder_t()=default
void append(coop_shptr_t coop) noexcept
std::size_t m_final_dereg_chain_size
Number of items in the chain of coops for the final deregistration.
bool empty() const noexcept
coop_shptr_t giveout_current_chain() noexcept
coop_shptr_t m_final_dereg_chain_head
The head of the chain of coops for the final deregistration.
final_dereg_chain_holder_t(final_dereg_chain_holder_t &&)=delete
Helper class for indication of long-lived reference via its type.
A public interface for control SObjectizer monitoring options.
An interface of data sources repository.
An indentificator for the timer.
Default multi-threaded environment infrastructure.
SO_5_FUNC environment_infrastructure_factory_t factory()
A factory for creation the default multitheading environment infrastructure.
Various implementations of environment_infrastructure.
Details of SObjectizer run-time implementations.
void process_final_dereg_chain(coop_shptr_t head) noexcept
Helper function that does proceesing of final dereg chain.
Internal implementation of run-time monitoring and statistics related stuff.
All stuff related to run-time monitoring and statistics.
Private part of message limit implementation.
Statistical data for run-time monitoring of coop repository content.
Statistics for run-time monitoring.