/** * @internal * @brief Initialize the matrixsparse module. * * @return #EINA_TRUE on success, #EINA_FALSE on failure. * * This function sets up the matrixsparse module of Eina. It is called by * eina_init(). * * This function creates mempool to speed up matrix rows and cells * management, using EINA_MEMPOOL environment variable if it is set to * choose the memory pool type to use. * * @see eina_init() */ Eina_Bool eina_matrixsparse_init(void) { const char *choice, *tmp; _eina_matrixsparse_log_dom = eina_log_domain_register("eina_matrixsparse", EINA_LOG_COLOR_DEFAULT); if (_eina_matrixsparse_log_dom < 0) { EINA_LOG_ERR("Could not register log domain: eina_matrixsparse"); return EINA_FALSE; } #ifdef EINA_DEFAULT_MEMPOOL choice = "pass_through"; #else choice = "chained_mempool"; #endif tmp = getenv("EINA_MEMPOOL"); if (tmp && tmp[0]) choice = tmp; _eina_matrixsparse_cell_mp = eina_mempool_add (choice, "matrixsparse_cell", NULL, sizeof (Eina_Matrixsparse_Cell), 120); if (!_eina_matrixsparse_cell_mp) { ERR("Mempool for matrixsparse_cell cannot be allocated in matrixsparse init."); goto on_init_fail; } _eina_matrixsparse_row_mp = eina_mempool_add (choice, "matrixsparse_row", NULL, sizeof (Eina_Matrixsparse_Row), 120); if (!_eina_matrixsparse_row_mp) { ERR("Mempool for matrixsparse_row cannot be allocated in matrixsparse init."); goto on_init_fail; } #define EMS(n) eina_magic_string_static_set(n, n##_STR) EMS(EINA_MAGIC_MATRIXSPARSE); EMS(EINA_MAGIC_MATRIXSPARSE_ROW); EMS(EINA_MAGIC_MATRIXSPARSE_CELL); EMS(EINA_MAGIC_MATRIXSPARSE_ITERATOR); EMS(EINA_MAGIC_MATRIXSPARSE_ROW_ACCESSOR); EMS(EINA_MAGIC_MATRIXSPARSE_ROW_ITERATOR); EMS(EINA_MAGIC_MATRIXSPARSE_CELL_ACCESSOR); EMS(EINA_MAGIC_MATRIXSPARSE_CELL_ITERATOR); #undef EMS return EINA_TRUE; on_init_fail: eina_log_domain_unregister(_eina_matrixsparse_log_dom); _eina_matrixsparse_log_dom = -1; return EINA_FALSE; }
/** * @internal * @brief Initialize the simple xml parser module. * * @return #EINA_TRUE on success, #EINA_FALSE on failure. * * This function sets up the simple xml parser module of Eina. It is called by * eina_init(). * * @see eina_init() */ Eina_Bool eina_simple_xml_init(void) { const char *choice, *tmp; _eina_simple_xml_log_dom = eina_log_domain_register("eina_simple_xml", EINA_LOG_COLOR_DEFAULT); if (_eina_simple_xml_log_dom < 0) { EINA_LOG_ERR("Could not register log domain: eina_simple_xml"); return EINA_FALSE; } #ifdef EINA_DEFAULT_MEMPOOL choice = "pass_through"; #else choice = "chained_mempool"; #endif tmp = getenv("EINA_MEMPOOL"); if (tmp && tmp[0]) choice = tmp; _eina_simple_xml_tag_mp = eina_mempool_add (choice, "simple_xml_tag", NULL, sizeof(Eina_Simple_XML_Node_Tag), 32); if (!_eina_simple_xml_tag_mp) { ERR("Mempool for simple_xml_tag cannot be allocated in init."); goto on_init_fail; } _eina_simple_xml_attribute_mp = eina_mempool_add (choice, "simple_xml_attribute", NULL, sizeof(Eina_Simple_XML_Attribute), 8); if (!_eina_simple_xml_attribute_mp) { ERR("Mempool for simple_xml_attribute cannot be allocated in init."); eina_mempool_del(_eina_simple_xml_tag_mp); goto on_init_fail; } #define EMS(n) eina_magic_string_static_set(n, n ## _STR) EMS(EINA_MAGIC_SIMPLE_XML_TAG); EMS(EINA_MAGIC_SIMPLE_XML_DATA); EMS(EINA_MAGIC_SIMPLE_XML_ATTRIBUTE); #undef EMS return EINA_TRUE; on_init_fail: eina_log_domain_unregister(_eina_simple_xml_log_dom); _eina_simple_xml_log_dom = -1; return EINA_FALSE; }
Eina_Bool eet_mempool_init(void) { const char *choice; unsigned int i; choice = getenv("EINA_MEMPOOL"); if ((!choice) || (!choice[0])) choice = "chained_mempool"; for (i = 0; i < sizeof (mempool_array) / sizeof (mempool_array[0]); ++i) { retry: mempool_array[i]->mp = eina_mempool_add(choice, mempool_array[i]->name, NULL, mempool_array[i]->size, 64); if (!mempool_array[i]->mp) { if (!strcmp(choice, "pass_through")) { ERR("Falling back to pass through ! Previously tried '%s' mempool.", choice); choice = "pass_through"; goto retry; } else { ERR("Impossible to allocate mempool '%s' !", choice); return EINA_FALSE; } } } return EINA_TRUE; }
Eina_Bool eina_rectangle_init(void) { const char *choice, *tmp; _eina_rectangle_log_dom = eina_log_domain_register("eina_rectangle", EINA_LOG_COLOR_DEFAULT); if (_eina_rectangle_log_dom < 0) { EINA_LOG_ERR("Could not register log domain: eina_rectangle"); return EINA_FALSE; } #ifdef EINA_DEFAULT_MEMPOOL choice = "pass_through"; #else choice = "chained_mempool"; #endif tmp = getenv("EINA_MEMPOOL"); if (tmp && tmp[0]) choice = tmp; _eina_rectangle_alloc_mp = eina_mempool_add (choice, "rectangle-alloc", NULL, sizeof(Eina_Rectangle_Alloc) + sizeof(Eina_Rectangle), 64); if (!_eina_rectangle_alloc_mp) { ERR("Mempool for rectangle cannot be allocated in rectangle init."); goto init_error; } _eina_rectangle_mp = eina_mempool_add (choice, "rectangle", NULL, sizeof(Eina_Rectangle), 32); if (!_eina_rectangle_mp) { ERR("Mempool for rectangle cannot be allocated in rectangle init."); goto init_error; } return EINA_TRUE; init_error: eina_log_domain_unregister(_eina_rectangle_log_dom); _eina_rectangle_log_dom = -1; return EINA_FALSE; }
Eina_Bool ecore_mempool_init(void) { const char *choice; unsigned int i; #define MP_SIZE_INIT(TYPE, Type) \ Type##_mp.size = _ecore_sizeof_##TYPE MP_SIZE_INIT(Ecore_Animator, ecore_animator); MP_SIZE_INIT(Ecore_Event_Handler, ecore_event_handler); MP_SIZE_INIT(Ecore_Event_Filter, ecore_event_filter); MP_SIZE_INIT(Ecore_Event, ecore_event); MP_SIZE_INIT(Ecore_Idle_Exiter, ecore_idle_exiter); MP_SIZE_INIT(Ecore_Idle_Enterer, ecore_idle_enterer); MP_SIZE_INIT(Ecore_Idler, ecore_idler); MP_SIZE_INIT(Ecore_Job, ecore_job); MP_SIZE_INIT(Ecore_Timer, ecore_timer); MP_SIZE_INIT(Ecore_Poller, ecore_poller); MP_SIZE_INIT(Ecore_Pipe, ecore_pipe); MP_SIZE_INIT(Ecore_Fd_Handler, ecore_fd_handler); #ifdef _WIN32 MP_SIZE_INIT(Ecore_Win32_Handler, ecore_win32_handler); #endif #undef MP_SIZE_INIT choice = getenv("EINA_MEMPOOL"); if ((!choice) || (!choice[0])) choice = "chained_mempool"; for (i = 0; i < sizeof (mempool_array) / sizeof (mempool_array[0]); ++i) { retry: mempool_array[i]->mp = eina_mempool_add(choice, mempool_array[i]->name, NULL, mempool_array[i]->size, 64); if (!mempool_array[i]->mp) { if (!strcmp(choice, "pass_through")) { ERR("Falling back to pass through ! Previously tried '%s' mempool.", choice); choice = "pass_through"; goto retry; } else { ERR("Impossible to allocate mempool '%s' !", choice); return EINA_FALSE; } } } return EINA_TRUE; }
int main(int argc, char *argv[]) { char path[PATH_MAX + 128], buf[PATH_MAX]; FILE *log; int fd; const char *log_file_dir = NULL; const char *hostname_str = NULL; #ifdef HAVE_SYS_RESOURCE_H setpriority(PRIO_PROCESS, 0, 19); #elif _WIN32 SetPriorityClass(GetCurrentProcess(), IDLE_PRIORITY_CLASS); #endif if (!eina_init()) return 1; efreetd_mp_stat = eina_mempool_add("chained_mempool", "struct stat", NULL, sizeof(struct stat), 10); if (!efreetd_mp_stat) return 1; if (!ecore_init()) goto ecore_error; ecore_app_args_set(argc, (const char **)argv); if (!ecore_file_init()) goto ecore_file_error; if (!ipc_init()) goto ipc_error; if (!cache_init()) goto cache_error; log_file_dir = eina_environment_tmp_get(); if (gethostname(buf, sizeof(buf)) < 0) hostname_str = ""; else hostname_str = buf; snprintf(path, sizeof(path), "%s/efreetd_%s_XXXXXX.log", log_file_dir, hostname_str); fd = eina_file_mkstemp(path, NULL); if (fd < 0) { ERR("Can't create log file '%s'\b", path); goto tmp_error; } log = fdopen(fd, "wb"); if (!log) goto tmp_error; eina_log_print_cb_set(eina_log_print_cb_file, log); efreetd_log_dom = eina_log_domain_register("efreetd", EFREETD_DEFAULT_LOG_COLOR); if (efreetd_log_dom < 0) { EINA_LOG_ERR("Efreet: Could not create a log domain for efreetd."); goto tmp_error; } ecore_main_loop_begin(); eina_mempool_del(efreetd_mp_stat); cache_shutdown(); ipc_shutdown(); ecore_file_shutdown(); ecore_shutdown(); eina_log_domain_unregister(efreetd_log_dom); efreetd_log_dom = -1; eina_shutdown(); return 0; tmp_error: cache_shutdown(); cache_error: ipc_shutdown(); ipc_error: ecore_file_shutdown(); ecore_file_error: ecore_shutdown(); ecore_error: if (efreetd_log_dom >= 0) eina_log_domain_unregister(efreetd_log_dom); efreetd_log_dom = -1; eina_shutdown(); return 1; }