/** * @internal * @brief Shut down the matrixsparse module. * * @return #EINA_TRUE on success, #EINA_FALSE on failure. * * This function shuts down the matrixsparse module set up by * eina_matrixsparse_init(). It is called by eina_shutdown(). * * @see eina_shutdown() */ Eina_Bool eina_matrixsparse_shutdown(void) { eina_mempool_del(_eina_matrixsparse_row_mp); eina_mempool_del(_eina_matrixsparse_cell_mp); eina_log_domain_unregister(_eina_matrixsparse_log_dom); _eina_matrixsparse_log_dom = -1; return EINA_TRUE; }
/** * @internal * @brief Shut down the simple xml parser module. * * @return #EINA_TRUE on success, #EINA_FALSE on failure. * * This function shuts down the simple xml parser module set * up by eina_simple_xml_init(). It is called by * eina_shutdown(). * * @see eina_shutdown() */ Eina_Bool eina_simple_xml_shutdown(void) { eina_mempool_del(_eina_simple_xml_attribute_mp); eina_mempool_del(_eina_simple_xml_tag_mp); eina_log_domain_unregister(_eina_simple_xml_log_dom); _eina_simple_xml_log_dom = -1; return EINA_TRUE; }
Eina_Bool eina_rectangle_shutdown(void) { Eina_Rectangle *del; while ((del = eina_trash_pop(&_eina_rectangles))) eina_mempool_free(_eina_rectangle_mp, del); _eina_rectangles_count = 0; eina_mempool_del(_eina_rectangle_alloc_mp); eina_mempool_del(_eina_rectangle_mp); eina_log_domain_unregister(_eina_rectangle_log_dom); _eina_rectangle_log_dom = -1; return EINA_TRUE; }
/** * @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; }
void eet_mempool_shutdown(void) { unsigned int i; for (i = 0; i < sizeof (mempool_array) / sizeof (mempool_array[0]); ++i) { eina_mempool_del(mempool_array[i]->mp); mempool_array[i]->mp = NULL; } }
static void _esql_res_free(Esql_Res *res) { Esql_Row *r; Eina_Inlist *l; DBG("res=%p (refcount=%d)", res, res->refcount); if (res->rows) EINA_INLIST_FOREACH_SAFE(res->rows, l, r) esql_row_free(r); if (res->desc) { /* memset is not needed, but leave it here to find if people * kept reference to values after row is removed, see below. */ memset(res->desc, 0, sizeof(res->desc)); free(res->desc); /* NOTE: after this point, if users are still holding 'desc' they will * have problems. This can be done if user calls eina_value_copy() * on some esql_row_value_struct_get() * * If this is an use case, add Eina_Value_Struct_Desc to some other * struct and do reference counting on it, increment on * alloc/copy, decrement on free. * * Remember that struct is created/ref on thread, and it is free'd * on main thread, then needs locking! */ } if (res->e->pool) { Esql_Pool *ep = (Esql_Pool*)res->e; res->e = EINA_INLIST_CONTAINER_GET(ep->esqls, Esql); } res->e->backend.res_free(res); free(res->query); if (res->mempool) eina_mempool_del(res->mempool); esql_res_mp_free(res); }
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; }