void eet_identity_unref(Eet_Key *key);
void eet_identity_ref(Eet_Key *key);
+void eet_node_shutdown(void);
+int eet_node_init(void);
+Eet_Node *eet_node_new(void);
+void eet_node_free(Eet_Node *node);
+
#ifndef PATH_MAX
# define PATH_MAX 4096
#endif
if (!strcmp(tok4, "{"))
{
/* we have 'group NAM TYP {' */
- n = calloc(1, sizeof(Eet_Node));
+ n = eet_node_new();
if (n)
{
n->parent = node;
/* we have 'value NAME TYP XXX' */
if (node_base)
{
- n = calloc(1, sizeof(Eet_Node));
+ n = eet_node_new();
if (n)
{
n->parent = node;
goto shutdown_eina;
}
+ if (!eet_node_init())
+ {
+ EINA_LOG_ERR("Eet: Eet_Node mempool creation failed");
+ goto unregister_log_domain;
+ }
+
#ifdef HAVE_GNUTLS
/* Before the library can be used, it must initialize itself if needed. */
if (gcry_control (GCRYCTL_ANY_INITIALIZATION_P) == 0)
/* Disable warning messages about problems with the secure memory subsystem.
This command should be run right after gcry_check_version. */
if (gcry_control(GCRYCTL_DISABLE_SECMEM_WARN))
- goto unregister_log_domain;
+ goto shutdown_eet;
/* This command is used to allocate a pool of secure memory and thus
enabling the use of secure memory. It also drops all extra privileges the
process has (i.e. if it is run as setuid (root)). If the argument nbytes
WRN("BIG FAT WARNING: I AM UNABLE TO REQUEST SECMEM, Cryptographic operation are at risk !");
}
if (gnutls_global_init())
- goto unregister_log_domain;
+ goto shutdown_eet;
#endif
#ifdef HAVE_OPENSSL
ERR_load_crypto_strings();
return eet_init_count;
+ shutdown_eet:
+ eet_node_shutdown();
unregister_log_domain:
eina_log_domain_unregister(_eet_log_dom_global);
_eet_log_dom_global = -1;
return eet_init_count;
eet_clearcache();
+ eet_node_shutdown();
#ifdef HAVE_GNUTLS
gnutls_global_deinit();
#endif
# include <config.h>
#endif
+#include <string.h>
#include <stdio.h>
#include <Eina.h>
#include "Eet.h"
#include "Eet_private.h"
+static Eina_Mempool *_eet_node_mp = NULL;
+
+Eet_Node *
+eet_node_new(void)
+{
+ Eet_Node *result;
+
+ result = eina_mempool_malloc(_eet_node_mp, sizeof (Eet_Node));
+ if (!result)
+ return NULL;
+
+ memset(result, 0, sizeof (Eet_Node));
+ return result;
+}
+
+void
+eet_node_free(Eet_Node *node)
+{
+ eina_mempool_free(_eet_node_mp, node);
+}
+
static Eet_Node *
_eet_node_new(const char *name, int type)
{
Eet_Node *n;
- n = calloc(1, sizeof (Eet_Node));
+ n = eet_node_new();
if (!n) return NULL;
n->type = type;
}
eina_stringshare_del(n->name);
- free(n);
+ eet_node_free(n);
}
static const char *eet_node_dump_g_name[6] = {
break;
}
}
+
+int
+eet_node_init(void)
+{
+ char *choice;
+ char *tmp;
+
+ choice = "chained_mempool";
+ tmp = getenv("EET_MEMPOOL");
+ if (tmp && tmp[0])
+ choice = tmp;
+
+ _eet_node_mp = eina_mempool_add(choice, "eet-node-alloc", NULL, sizeof(Eet_Node), 1024);
+
+ return _eet_node_mp ? 1 : 0;
+}
+
+void
+eet_node_shutdown(void)
+{
+ eina_mempool_del(_eet_node_mp);
+ _eet_node_mp = NULL;
+}