Eina_Bool _share_common_threads_activated = EINA_FALSE;
-static Eina_Lock _mutex_big;
+static Eina_Spinlock _mutex_big;
#ifdef EINA_STRINGSHARE_USAGE
void
eina_share_common_population_add(Eina_Share *share, int slen)
{
- eina_lock_take(&_mutex_big);
+ eina_spinlock_take(&_mutex_big);
eina_share_common_population_nolock_add(share, slen);
- eina_lock_release(&_mutex_big);
+ eina_spinlock_release(&_mutex_big);
}
static void
void
eina_share_common_population_del(Eina_Share *share, int slen)
{
- eina_lock_take(&_mutex_big);
+ eina_spinlock_take(&_mutex_big);
eina_share_common_population_nolock_del(chare, slen);
- eina_lock_release(&_mutex_big);
+ eina_spinlock_release(&_mutex_big);
}
static void
if (_eina_share_common_count++ != 0)
return EINA_TRUE;
- eina_lock_new(&_mutex_big);
+ eina_spinlock_new(&_mutex_big);
return EINA_TRUE;
on_error:
unsigned int i;
Eina_Share *share = *_share;
- eina_lock_take(&_mutex_big);
+ eina_spinlock_take(&_mutex_big);
_eina_share_common_population_stats(share);
_eina_share_common_population_shutdown(share);
- eina_lock_release(&_mutex_big);
+ eina_spinlock_release(&_mutex_big);
free(*_share);
*_share = NULL;
if (--_eina_share_common_count != 0)
return EINA_TRUE;
- eina_lock_free(&_mutex_big);
+ eina_spinlock_free(&_mutex_big);
return EINA_TRUE;
}
hash = eina_hash_superfast(str, slen);
- eina_lock_take(&_mutex_big);
+ eina_spinlock_take(&_mutex_big);
p_bucket = share->share->buckets + EINA_SHARE_COMMON_BUCKET_IDX(hash);
ed = _eina_share_common_find_hash(*p_bucket, EINA_SHARE_COMMON_NODE_HASH(hash));
str,
slen,
null_size);
- eina_lock_release(&_mutex_big);
+ eina_spinlock_release(&_mutex_big);
return s;
}
- EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(ed, eina_lock_release(&_mutex_big), NULL);
+ EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(ed, eina_spinlock_release(&_mutex_big), NULL);
el = _eina_share_common_head_find(ed, str, slen);
if (el)
{
EINA_MAGIC_CHECK_SHARE_COMMON_NODE(el,
share->node_magic,
- eina_lock_release(&_mutex_big));
+ eina_spinlock_release(&_mutex_big));
el->references++;
- eina_lock_release(&_mutex_big);
+ eina_spinlock_release(&_mutex_big);
return el->str;
}
el = _eina_share_common_node_alloc(slen, null_size);
if (!el)
{
- eina_lock_release(&_mutex_big);
+ eina_spinlock_release(&_mutex_big);
return NULL;
}
ed->head = el;
_eina_share_common_population_head_add(share, ed);
- eina_lock_release(&_mutex_big);
+ eina_spinlock_release(&_mutex_big);
return el->str;
}
if (!str)
return NULL;
- eina_lock_take(&_mutex_big);
+ eina_spinlock_take(&_mutex_big);
node = _eina_share_common_node_from_str(str, share->node_magic);
if (!node)
{
- eina_lock_release(&_mutex_big);
+ eina_spinlock_release(&_mutex_big);
return str;
}
node->references++;
eina_share_common_population_nolock_add(share, node->length);
- eina_lock_release(&_mutex_big);
+ eina_spinlock_release(&_mutex_big);
return str;
}
if (!str)
return EINA_TRUE;
- eina_lock_take(&_mutex_big);
+ eina_spinlock_take(&_mutex_big);
node = _eina_share_common_node_from_str(str, share->node_magic);
if (!node)
if (node->references > 1)
{
node->references--;
- eina_lock_release(&_mutex_big);
+ eina_spinlock_release(&_mutex_big);
return EINA_TRUE;
}
if (!ed)
goto on_error;
- EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(ed, eina_lock_release(&_mutex_big), EINA_FALSE);
+ EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(ed, eina_spinlock_release(&_mutex_big), EINA_FALSE);
if (node != &ed->builtin_node)
{
else
_eina_share_common_population_head_del(share, ed);
- eina_lock_release(&_mutex_big);
+ eina_spinlock_release(&_mutex_big);
return EINA_TRUE;
on_error:
- eina_lock_release(&_mutex_big);
+ eina_spinlock_release(&_mutex_big);
/* possible segfault happened before here, but... */
return EINA_FALSE;
}
printf("DDD: len ref string\n");
printf("DDD:-------------------\n");
- eina_lock_take(&_mutex_big);
+ eina_spinlock_take(&_mutex_big);
for (i = 0; i < EINA_SHARE_COMMON_BUCKETS; i++)
{
if (!share->share->buckets[i])
share->population_group[i].max);
#endif
- eina_lock_release(&_mutex_big);
+ eina_spinlock_release(&_mutex_big);
}
/**
static const char EINA_MAGIC_STRINGSHARE_NODE_STR[] = "Eina Stringshare Node";
extern Eina_Bool _share_common_threads_activated;
-static Eina_Lock _mutex_small;
+static Eina_Spinlock _mutex_small;
/* Stringshare optimizations */
static const unsigned char _eina_stringshare_single[512] = {
static void
_eina_stringshare_small_init(void)
{
- eina_lock_new(&_mutex_small);
+ eina_spinlock_new(&_mutex_small);
memset(&_eina_small_share, 0, sizeof(_eina_small_share));
}
*p_bucket = NULL;
}
- eina_lock_free(&_mutex_small);
+ eina_spinlock_free(&_mutex_small);
}
static void
else if (slen < 4)
{
eina_share_common_population_del(stringshare_share, slen);
- eina_lock_take(&_mutex_small);
+ eina_spinlock_take(&_mutex_small);
_eina_stringshare_small_del(str, slen);
- eina_lock_release(&_mutex_small);
+ eina_spinlock_release(&_mutex_small);
return;
}
const char *s;
eina_share_common_population_add(stringshare_share, slen);
- eina_lock_take(&_mutex_small);
+ eina_spinlock_take(&_mutex_small);
s = _eina_stringshare_small_add(str, slen);
- eina_lock_release(&_mutex_small);
+ eina_spinlock_release(&_mutex_small);
return s;
}
const char *s;
eina_share_common_population_add(stringshare_share, slen);
- eina_lock_take(&_mutex_small);
+ eina_spinlock_take(&_mutex_small);
s = _eina_stringshare_small_add(str, slen);
- eina_lock_release(&_mutex_small);
+ eina_spinlock_release(&_mutex_small);
return s;
}