/*---------------------------------------------------------------------------*/ static void xio_ctor(void) { size_t i; xio_env_startup(); for (i = 0; i < transport_tbl_sz; i++) if (!transport_tbl[i]) transport_tbl[i] = transport_func_list_tbl[i](); page_size = xio_get_page_size(); if (page_size < 0) page_size = 4096; g_mhz = xio_get_cpu_mhz(); xio_thread_data_construct(); usr_idr = xio_idr_create(); if (!usr_idr) ERROR_LOG("usr_idr creation failed"); sessions_cache_construct(); nexus_cache_construct(); for (i = 0; i < transport_tbl_sz; i++) { xio_reg_transport(transport_tbl[i]); if (transport_tbl[i]->ctor) transport_tbl[i]->ctor(); } }
/*---------------------------------------------------------------------------*/ __attribute__((constructor)) void xio_init(void) { static atomic_t initialized; static pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER; if (! atomic_read(&initialized)) { pthread_mutex_lock(&mtx); if (!atomic_read(&initialized)) { page_size = sysconf(_SC_PAGESIZE); xio_thread_data_construct(); sessions_store_construct(); conns_store_construct(); atomic_set(&initialized, 1); } pthread_mutex_unlock(&mtx); } }