* Added eina_binbuf: This is just like strbuf but for binary blobs.
Requested by discomfitor and honestly it looks needed.
+2011-05-18 Cedric Bail
+
+ * Fix eina_share_common_init to be called only once.
static const char EINA_MAGIC_SHARE_STR[] = "Eina Share";
static const char EINA_MAGIC_SHARE_HEAD_STR[] = "Eina Share Head";
+static int _eina_share_common_count = 0;
#define EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(d, unlock, ...) \
do { \
const char *node_magic_STR)
{
Eina_Share *share;
+
+ if (_eina_share_common_count++ != 0)
+ return EINA_TRUE;
+
share = *_share = calloc(sizeof(Eina_Share), 1);
- if (!share)
- return EINA_FALSE;
+ if (!share) goto on_error;
if (_eina_share_common_log_dom < 0) /*Only register if not already */
_eina_share_common_log_dom = eina_log_domain_register(
if (_eina_share_common_log_dom < 0)
{
EINA_LOG_ERR("Could not register log domain: eina_share_common");
- return EINA_FALSE;
+ goto on_error;
}
share->share = calloc(1, sizeof(Eina_Share_Common));
_eina_share_common_log_dom = -1;
}
- return EINA_FALSE;
+ goto on_error;
}
share->node_magic = node_magic;
eina_lock_new(&_mutex_big);
return EINA_TRUE;
+
+ on_error:
+ _eina_share_common_count--;
+ return EINA_FALSE;
}
/**
unsigned int i;
Eina_Share *share = *_share;
+ if (--_eina_share_common_count != 0)
+ return EINA_TRUE;
+
eina_lock_take(&_mutex_big);
_eina_share_common_population_stats(share);