raster pushed a commit to branch master.
commit c1556b711239193cb7a63be3f647e185da83134d
Author: Carsten Haitzler (Rasterman) <[email protected]>
Date: Sun Sep 8 10:03:35 2013 +0900
eina - remove deadlock from share-common + remove extra lock/unlock
---
src/lib/eina/eina_share_common.c | 34 ++++++++++++++++++++++++----------
1 file changed, 24 insertions(+), 10 deletions(-)
diff --git a/src/lib/eina/eina_share_common.c b/src/lib/eina/eina_share_common.c
index 0dbf37d..c2b64ac 100644
--- a/src/lib/eina/eina_share_common.c
+++ b/src/lib/eina/eina_share_common.c
@@ -236,11 +236,9 @@ _eina_share_common_population_stats(Eina_Share *share)
share->population_group[i].max);
}
-void
-eina_share_common_population_add(Eina_Share *share, int slen)
+static void
+eina_share_common_population_nolock_add(Eina_Share *share, int slen)
{
- eina_lock_take(&_mutex_big);
-
share->population.count++;
if (share->population.count > share->population.max)
share->population.max = share->population.count;
@@ -253,19 +251,29 @@ eina_share_common_population_add(Eina_Share *share, int
slen)
share->population_group[slen].max =
share->population_group[slen].count;
}
-
- eina_lock_release(&_mutex_big);
}
void
-eina_share_common_population_del(Eina_Share *share, int slen)
+eina_share_common_population_add(Eina_Share *share, int slen)
{
eina_lock_take(&_mutex_big);
+ eina_share_common_population_nolock_add(share, slen);
+ eina_lock_release(&_mutex_big);
+}
+static void
+eina_share_common_population_nolock_del(Eina_Share *share, int slen)
+{
share->population.count--;
if (slen < 4)
share->population_group[slen].count--;
+}
+void
+eina_share_common_population_del(Eina_Share *share, int slen)
+{
+ eina_lock_take(&_mutex_big);
+ eina_share_common_population_nolock_del(chare, slen);
eina_lock_release(&_mutex_big);
}
@@ -301,9 +309,15 @@ static void
_eina_share_common_population_shutdown(EINA_UNUSED Eina_Share *share
}
static void _eina_share_common_population_stats(EINA_UNUSED Eina_Share *share)
{
}
+static void eina_share_common_population_nolock_add(EINA_UNUSED Eina_Share
*share,
+ EINA_UNUSED int slen) {
+}
void eina_share_common_population_add(EINA_UNUSED Eina_Share *share,
EINA_UNUSED int slen) {
}
+static void eina_share_common_population_nolock_del(EINA_UNUSED Eina_Share
*share,
+ EINA_UNUSED int slen) {
+}
void eina_share_common_population_del(EINA_UNUSED Eina_Share *share,
EINA_UNUSED int slen) {
}
@@ -801,9 +815,9 @@ eina_share_common_ref(Eina_Share *share, const char *str)
}
node->references++;
- eina_lock_release(&_mutex_big);
+ eina_share_common_population_nolock_add(share, node->length);
- eina_share_common_population_add(share, node->length);
+ eina_lock_release(&_mutex_big);
return str;
}
@@ -827,7 +841,7 @@ eina_share_common_del(Eina_Share *share, const char *str)
goto on_error;
slen = node->length;
- eina_share_common_population_del(share, slen);
+ eina_share_common_population_nolock_del(share, slen);
if (node->references > 1)
{
node->references--;
--
------------------------------------------------------------------------------
Learn the latest--Visual Studio 2012, SharePoint 2013, SQL 2012, more!
Discover the easy way to master current and previous Microsoft technologies
and advance your career. Get an incredible 1,500+ hours of step-by-step
tutorial videos with LearnDevNow. Subscribe today and save!
http://pubads.g.doubleclick.net/gampad/clk?id=58041391&iu=/4140/ostg.clktrk