26 #if defined (SERVER_MODE) 31 #if defined (SERVER_MODE) 54 , m_all_entries (
NULL)
55 , m_entry_dispatcher (
NULL)
56 , m_available_entries_count (0)
57 , m_entry_manager (
NULL)
58 , m_daemon_entry_manager (
NULL)
59 , m_lf_tran_sys (
NULL)
86 #else // not SA_MODE = SERVER_MODE 92 #endif // not SA_MODE = SERVER_MODE 113 #if defined (SERVER_MODE) 116 #else // !SERVER_MODE = SA_MODE 118 #endif // !SERVER_MODE = SA_MODE 121 template<
typename Res>
124 assert (tracker.empty ());
126 #if defined (SERVER_MODE) 127 for (; !tracker.empty ();)
129 const auto iter = tracker.begin ();
130 (*iter)->stop_execution ();
132 tracker.erase (iter);
134 #endif // SERVER_MODE 137 template<
typename Res,
typename ... CtArgs>
150 Res *new_res =
new Res (std::forward<CtArgs> (args)...);
152 tracker.push_back (new_res);
162 #if defined (SERVER_MODE) 169 if (context_manager ==
NULL)
175 name, core_count, debug_logging, pool_threads, wait_for_task_time);
177 #else // not SERVER_MODE = SA_MODE 179 #endif // not SERVER_MODE = SA_MODE 186 #if defined (SERVER_MODE) 194 if (context_manager ==
NULL)
201 #else // not SERVER_MODE = SA_MODE 204 #endif // not SERVER_MODE = SA_MODE 210 #if defined (SERVER_MODE) 221 #else // not SERVER_MODE = SA_MODE 224 #endif // not SERVER_MODE = SA_MODE 227 template<
typename Res>
234 for (
auto iter = tracker.begin (); iter != tracker.end (); ++iter)
239 (void) tracker.erase (iter);
242 res->stop_execution ();
259 #if defined (SERVER_MODE) 260 if (worker_pool_arg ==
NULL)
266 #else // not SERVER_MODE = SA_MODE 268 #endif // not SERVER_MODE = SA_MODE 274 if (worker_pool_arg ==
NULL)
282 #if defined (SERVER_MODE) 284 worker_pool_arg->
execute (exec_p);
285 #else // not SERVER_MODE = SA_MODE 290 #endif // not SERVER_MODE = SA_MODE 297 if (worker_pool_arg ==
NULL)
305 #if defined (SERVER_MODE) 308 #else // not SERVER_MODE = SA_MODE 313 #endif // not SERVER_MODE = SA_MODE 320 if (worker_pool_arg ==
NULL)
329 #if defined (SERVER_MODE) 332 #else // not SERVER_MODE = SA_MODE 335 #endif // not SERVER_MODE = SA_MODE 342 #if defined (SERVER_MODE) 343 return worker_pool_arg ==
NULL || worker_pool_arg->
is_full ();
344 #else // not SERVER_MODE = SA_MODE 347 #endif // not SERVER_MODE = SA_MODE 353 #if defined (SERVER_MODE) 354 if (daemon_arg ==
NULL)
360 #else // not SERVER_MODE = SA_MODE 362 #endif // not SERVER_MODE = SA_MODE 368 #if defined (SERVER_MODE) 369 if (daemon_arg ==
NULL)
375 #else // not SERVER_MODE = SA_MODE 377 #endif // not SERVER_MODE = SA_MODE 391 assert (tl_Entry_p == &entry_p);
419 std::size_t max_daemons = 128;
426 m_max_threads = max_active_workers + max_conn_workers + max_vacuum_workers + max_daemons;
462 #if defined (SERVER_MODE) 464 #else // not SERVER_MODE = SA_MODE 465 const bool Is_single_thread =
true;
466 #endif // not SERVER_MODE = SA_MODE 486 Main_entry_p =
new entry ();
487 Main_entry_p->
index = 0;
492 #if defined (SERVER_MODE) 495 #endif // SERVER_MODE 504 #if defined (SERVER_MODE) 510 #endif // SERVER_MODE 516 #if defined (SERVER_MODE) 517 if (Main_entry_p !=
NULL)
521 #endif // SERVER_MODE 537 #if defined (SERVER_MODE) 538 size_t old_manager_thread_count = 0;
544 #endif // SERVER_MODE 613 tl_Entry_p = &tl_entry;
632 assert (!Is_single_thread);
638 if (Main_entry_p !=
NULL)
static entry * Main_entry_p
entry_dispatcher * m_entry_dispatcher
cubthread::entry * thread_get_thread_entry_info(void)
void return_lock_free_transaction_entries(void)
void assign_lf_tran_index(lockfree::tran::index idx)
std::vector< daemon * > m_daemons
void init_entries(bool with_lock_free=false)
const bool Is_single_thread
Res * create_and_track_resource(std::vector< Res * > &tracker, size_t entries_count, CtArgs &&...args)
entry_manager * m_entry_manager
bool try_execute(task_type *work_arg)
void execute(task_type *work_arg)
unsigned long int thread_id_t
std::size_t get_max_thread_count(void) const
void clear_thread_local_entry(void)
void wp_set_force_thread_always_alive()
friend void finalize(void)
int lf_initialize_transaction_systems(int max_threads)
void set_thread_local_entry(entry &tl_entry)
void push_task_on_core(entry_workpool *worker_pool_arg, entry_task *exec_p, std::size_t core_hash)
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))
thread_resume_suspend_status resume_status
virtual void retire(void)
thread_local entry * tl_Entry_p
void register_thread_local(void)
resource_shared_pool< entry > entry_dispatcher
#define NUM_NON_SYSTEM_TRANS
void destroy_daemon_without_entry(daemon *&daemon_arg)
virtual void execute(context_type &)=0
bool is_single_thread(void)
manager * get_manager(void)
void request_lock_free_transactions(void)
std::vector< entry_workpool * > m_worker_pools
lockfree::tran::system * m_lf_tran_sys
std::size_t m_max_threads
int prm_get_integer_value(PARAM_ID prm_id)
std::vector< daemon * > m_daemons_without_entries
friend void initialize(entry *&my_entry)
cuberr::context & get_error_context(void)
void check_not_single_thread(void)
void init_lockfree_system()
int initialize_thread_entries(bool with_lock_free)
void set_max_thread_count_from_config()
lockfree::tran::system & get_lockfree_transys()
int count(int &result, const cub_regex_object ®, const std::string &src, const int position, const INTL_CODESET codeset)
void check_all_killed(void)
std::mutex m_entries_mutex
void set_manager(manager *manager)
void destroy_worker_pool(entry_workpool *&worker_pool_arg)
entry * get_main_entry(void)
void deregister_thread_local(void)
void destroy_and_untrack_all_resources(std::vector< Res * > &tracker)
std::size_t m_available_entries_count
void free_index(index idx)
void set_max_thread_count(std::size_t count)
void destroy_daemon(daemon *&daemon_arg)
static bool is_flag_set(const T &where_to_check, const T &what_to_check)
void destroy_and_untrack_resource(std::vector< Res * > &tracker, Res *&res, std::size_t entries_count)
std::size_t get_max_count(void) const
bool prm_get_bool_value(PARAM_ID prm_id)
bool try_task(entry &thread_p, entry_workpool *worker_pool_arg, entry_task *exec_p)
entry * find_by_tid(thread_id_t tid)
daemon * create_daemon_without_entry(const looper &looper_arg, task_without_context *exec_p, const char *daemon_name)
entry * claim_entry(void)
void retire_entry(entry &entry_p)
void return_lock_free_transaction_entries(void)
daemon_entry_manager * m_daemon_entry_manager
bool is_pool_full(entry_workpool *worker_pool_arg)
void push_task(entry_workpool *worker_pool_arg, entry_task *exec_p)
daemon * create_daemon(const looper &looper_arg, entry_task *exec_p, const char *daemon_name="", entry_manager *context_manager=NULL)
void execute_on_core(task_type *work_arg, std::size_t core_hash)
bool is_logging_configured(const int logging_flag)