From a7398f4e084b0e7d475979181e92691a13aca9ae Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 10 Aug 2010 12:14:59 +0000 Subject: [PATCH] refcount locks to avoid deadlocks; array threadsafety should be good to go now SVN revision: 50962 --- legacy/eina/src/include/eina_array.h | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/legacy/eina/src/include/eina_array.h b/legacy/eina/src/include/eina_array.h index d133d66af9..4d8ec5d6b4 100644 --- a/legacy/eina/src/include/eina_array.h +++ b/legacy/eina/src/include/eina_array.h @@ -107,12 +107,14 @@ eina_array_rdlock(Eina_Array *array) if (!array) return EINA_FALSE; if (array->threadsafe) { - int ret; + if (!array->lockcount++) + { + int ret; - ret = pthread_rwlock_rdlock(&array->lock); - if ((ret != 0) && (ret != EDEADLK)) - return EINA_FALSE; - array->lockcount++; + ret = pthread_rwlock_rdlock(&array->lock); + if ((ret != 0) && (ret != EDEADLK)) + return EINA_FALSE; + } } return EINA_TRUE; } @@ -123,12 +125,14 @@ eina_array_wrlock(Eina_Array *array) if (!array) return EINA_FALSE; if (array->threadsafe) { - int ret; + if (!array->lockcount++) + { + int ret; - ret = pthread_rwlock_wrlock(&array->lock); - if ((ret != 0) && (ret != EDEADLK)) - return EINA_FALSE; - array->lockcount++; + ret = pthread_rwlock_wrlock(&array->lock); + if ((ret != 0) && (ret != EDEADLK)) + return EINA_FALSE; + } } return EINA_TRUE; }