32 #include <condition_variable> 101 return g_wp_task_capper->
try_task (task);
109 if (g_active_sessions.empty ())
118 g_wp_context_manager, 1,
false,
true);
128 g_active_sessions.insert (&load_session);
130 g_wp_mutex.unlock ();
138 if (g_active_sessions.erase (&load_session) != 1)
144 if (g_active_sessions.empty ())
152 g_worker_pool =
NULL;
153 g_wp_context_manager =
NULL;
154 g_wp_task_capper =
NULL;
157 g_wp_mutex.unlock ();
158 g_wp_condvar.notify_one ();
164 std::unique_lock<std::mutex> ulock (g_wp_mutex);
165 if (g_active_sessions.empty ())
170 for (
auto &it : g_active_sessions)
174 auto pred = [] () ->
bool 176 return g_active_sessions.empty ();
178 g_wp_condvar.wait (ulock, pred);
184 std::unique_lock<std::mutex> ulock (g_wp_mutex);
185 if (g_worker_pool !=
NULL)
void on_retire(cubthread::entry &context) override
void worker_manager_get_stats(UINT64 *stats_out)
static std::mutex g_wp_mutex
css_conn_entry * conn_entry
static std::condition_variable g_wp_condvar
entry_workpool * create_worker_pool(std::size_t pool_size, std::size_t task_max_count, const char *name, entry_manager *context_manager, std::size_t core_count, bool debug_logging, bool pool_threads=false, wait_seconds wait_for_task_time=std::chrono::seconds(5))
bool try_task(task< Context > *task)
manager * get_manager(void)
int prm_get_integer_value(PARAM_ID prm_id)
static worker_context_manager * g_wp_context_manager
cubload::driver * m_loaddb_driver
static cubthread::worker_pool_task_capper< cubthread::entry > * g_wp_task_capper
std::set< session * > g_active_sessions
void get_stats(cubperf::stat_value *stats_out) const
~worker_context_manager() override=default
void worker_manager_unregister_session(session &load_session)
worker_context_manager(unsigned int pool_size)
void destroy_worker_pool(entry_workpool *&worker_pool_arg)
void worker_manager_stop_all()
void on_create(cubthread::entry &context) override
static cubthread::entry_workpool * g_worker_pool
void worker_manager_register_session(session &load_session)
bool worker_manager_try_task(cubthread::entry_task *task)
resource_shared_pool< driver > m_driver_pool