Eina : add a prefix to STRINGSHARE_LOCK and LOG_LOCK

SVN revision: 43399
This commit is contained in:
Jonathan Atton 2009-11-01 20:09:26 +00:00
parent 6ea6dc0856
commit 4bfc091f41
3 changed files with 70 additions and 71 deletions

View File

@ -375,37 +375,37 @@ static pthread_t _main_thread;
#ifdef EINA_PTHREAD_SPIN #ifdef EINA_PTHREAD_SPIN
static pthread_spinlock_t _log_lock; static pthread_spinlock_t _log_lock;
#define LOCK() \ #define LOG_LOCK() \
if(_threads_enabled) \ if(_threads_enabled) \
do { \ do { \
if (0) \ if (0) \
fprintf(stderr, "+++LOG LOCKED! [%s, %lu]\n", \ fprintf(stderr, "+++LOG LOG_LOCKED! [%s, %lu]\n", \
__FUNCTION__, pthread_self()); \ __FUNCTION__, pthread_self()); \
if (EINA_UNLIKELY(_threads_enabled)) \ if (EINA_UNLIKELY(_threads_enabled)) \
pthread_spin_lock(&_log_lock); \ pthread_spin_lock(&_log_lock); \
} while (0) } while (0)
#define UNLOCK() \ #define LOG_UNLOCK() \
if(_threads_enabled) \ if(_threads_enabled) \
do { \ do { \
if (EINA_UNLIKELY(_threads_enabled)) \ if (EINA_UNLIKELY(_threads_enabled)) \
pthread_spin_unlock(&_log_lock); \ pthread_spin_unlock(&_log_lock); \
if (0) \ if (0) \
fprintf(stderr, \ fprintf(stderr, \
"---LOG UNLOCKED! [%s, %lu]\n", \ "---LOG LOG_UNLOCKED! [%s, %lu]\n", \
__FUNCTION__, pthread_self()); \ __FUNCTION__, pthread_self()); \
} while (0) } while (0)
#define INIT() pthread_spin_init(&_log_lock, PTHREAD_PROCESS_PRIVATE); #define INIT() pthread_spin_init(&_log_lock, PTHREAD_PROCESS_PRIVATE);
#define SHUTDOWN() pthread_spin_destroy(&_log_lock); #define SHUTDOWN() pthread_spin_destroy(&_log_lock);
#else #else
static pthread_mutex_t _log_mutex = PTHREAD_MUTEX_INITIALIZER; static pthread_mutex_t _log_mutex = PTHREAD_MUTEX_INITIALIZER;
#define LOCK() if(_threads_enabled) pthread_mutex_lock(&_log_mutex); #define LOG_LOCK() if(_threads_enabled) pthread_mutex_lock(&_log_mutex);
#define UNLOCK() if(_threads_enabled) pthread_mutex_unlock(&_log_mutex); #define LOG_UNLOCK() if(_threads_enabled) pthread_mutex_unlock(&_log_mutex);
#define INIT() do {} while (0) #define INIT() do {} while (0)
#define SHUTDOWN() do {} while (0) #define SHUTDOWN() do {} while (0)
#endif #endif
#else #else
#define LOCK() do {} while (0) #define LOG_LOCK() do {} while (0)
#define UNLOCK() do {} while (0) #define LOG_UNLOCK() do {} while (0)
#define IS_MAIN(t) (1) #define IS_MAIN(t) (1)
#define IS_OTHER(t) (0) #define IS_OTHER(t) (0)
#define CHECK_MAIN(...) do {} while (0) #define CHECK_MAIN(...) do {} while (0)
@ -1134,11 +1134,11 @@ eina_log_threads_enable(void)
EAPI void EAPI void
eina_log_print_cb_set(Eina_Log_Print_Cb cb, void *data) eina_log_print_cb_set(Eina_Log_Print_Cb cb, void *data)
{ {
LOCK(); LOG_LOCK();
_print_cb = cb; _print_cb = cb;
_print_cb_data = data; _print_cb_data = data;
eina_log_print_prefix_update(); eina_log_print_prefix_update();
UNLOCK(); LOG_UNLOCK();
} }
/** /**
@ -1243,9 +1243,9 @@ eina_log_domain_register(const char *name, const char *color)
EINA_SAFETY_ON_NULL_RETURN_VAL(name, -1); EINA_SAFETY_ON_NULL_RETURN_VAL(name, -1);
LOCK(); LOG_LOCK();
r = eina_log_domain_register_unlocked(name, color); r = eina_log_domain_register_unlocked(name, color);
UNLOCK(); LOG_UNLOCK();
return r; return r;
} }
@ -1274,9 +1274,9 @@ EAPI void
eina_log_domain_unregister(int domain) eina_log_domain_unregister(int domain)
{ {
EINA_SAFETY_ON_FALSE_RETURN(domain >= 0); EINA_SAFETY_ON_FALSE_RETURN(domain >= 0);
LOCK(); LOG_LOCK();
eina_log_domain_unregister_unlocked(domain); eina_log_domain_unregister_unlocked(domain);
UNLOCK(); LOG_UNLOCK();
} }
/** /**
@ -1446,9 +1446,9 @@ eina_log_print(int domain, Eina_Log_Level level, const char *file,
} }
#endif #endif
va_start(args, fmt); va_start(args, fmt);
LOCK(); LOG_LOCK();
eina_log_print_unlocked(domain, level, file, fnc, line, fmt, args); eina_log_print_unlocked(domain, level, file, fnc, line, fmt, args);
UNLOCK(); LOG_UNLOCK();
va_end(args); va_end(args);
} }
@ -1497,8 +1497,8 @@ eina_log_vprint(int domain, Eina_Log_Level level, const char *file,
return; return;
} }
#endif #endif
LOCK(); LOG_LOCK();
eina_log_print_unlocked(domain, level, file, fnc, line, fmt, args); eina_log_print_unlocked(domain, level, file, fnc, line, fmt, args);
UNLOCK(); LOG_UNLOCK();
} }

View File

@ -314,7 +314,6 @@ eina_threads_shutdown(void)
#endif #endif
} }
/** /**
* @} * @}
*/ */

View File

@ -183,15 +183,15 @@ static Eina_Bool _threads_activated = EINA_FALSE;
static pthread_mutex_t _mutex_small = PTHREAD_MUTEX_INITIALIZER; static pthread_mutex_t _mutex_small = PTHREAD_MUTEX_INITIALIZER;
//string >= 4 //string >= 4
static pthread_mutex_t _mutex_big = PTHREAD_MUTEX_INITIALIZER; static pthread_mutex_t _mutex_big = PTHREAD_MUTEX_INITIALIZER;
#define LOCK_SMALL() if(_threads_activated) pthread_mutex_lock(&_mutex_small); #define STRINGSHARE_LOCK_SMALL() if(_threads_activated) pthread_mutex_lock(&_mutex_small);
#define UNLOCK_SMALL() if(_threads_activated) pthread_mutex_unlock(&_mutex_small); #define STRINGSHARE_UNLOCK_SMALL() if(_threads_activated) pthread_mutex_unlock(&_mutex_small);
#define LOCK_BIG() if(_threads_activated) pthread_mutex_lock(&_mutex_big); #define STRINGSHARE_LOCK_BIG() if(_threads_activated) pthread_mutex_lock(&_mutex_big);
#define UNLOCK_BIG() if(_threads_activated) pthread_mutex_unlock(&_mutex_big); #define STRINGSHARE_UNLOCK_BIG() if(_threads_activated) pthread_mutex_unlock(&_mutex_big);
#else #else
#define LOCK_SMALL() do {} while (0) #define STRINGSHARE_LOCK_SMALL() do {} while (0)
#define UNLOCK_SMALL() do {} while (0) #define STRINGSHARE_UNLOCK_SMALL() do {} while (0)
#define LOCK_BIG() do {} while (0) #define STRINGSHARE_LOCK_BIG() do {} while (0)
#define UNLOCK_BIG() do {} while (0) #define STRINGSHARE_UNLOCK_BIG() do {} while (0)
#endif #endif
@ -301,8 +301,8 @@ _eina_stringshare_population_stats(void)
static void static void
_eina_stringshare_population_add(int slen) _eina_stringshare_population_add(int slen)
{ {
LOCK_SMALL(); STRINGSHARE_LOCK_SMALL();
LOCK_BIG(); STRINGSHARE_LOCK_BIG();
population.count++; population.count++;
if (population.count > population.max) if (population.count > population.max)
@ -315,22 +315,22 @@ _eina_stringshare_population_add(int slen)
population_group[slen].max = population_group[slen].count; population_group[slen].max = population_group[slen].count;
} }
UNLOCK_BIG(); STRINGSHARE_UNLOCK_BIG();
UNLOCK_SMALL(); STRINGSHARE_UNLOCK_SMALL();
} }
static void static void
_eina_stringshare_population_del(int slen) _eina_stringshare_population_del(int slen)
{ {
LOCK_SMALL(); STRINGSHARE_LOCK_SMALL();
LOCK_BIG(); STRINGSHARE_LOCK_BIG();
population.count--; population.count--;
if (slen < 4) if (slen < 4)
population_group[slen].count--; population_group[slen].count--;
UNLOCK_BIG(); STRINGSHARE_UNLOCK_BIG();
UNLOCK_SMALL(); STRINGSHARE_UNLOCK_SMALL();
} }
static void static void
@ -916,8 +916,8 @@ eina_stringshare_shutdown(void)
{ {
unsigned int i; unsigned int i;
LOCK_SMALL(); STRINGSHARE_LOCK_SMALL();
LOCK_BIG(); STRINGSHARE_LOCK_BIG();
_eina_stringshare_population_stats(); _eina_stringshare_population_stats();
@ -934,8 +934,8 @@ eina_stringshare_shutdown(void)
eina_log_domain_unregister(_eina_stringshare_log_dom); eina_log_domain_unregister(_eina_stringshare_log_dom);
_eina_stringshare_log_dom = -1; _eina_stringshare_log_dom = -1;
UNLOCK_BIG(); STRINGSHARE_UNLOCK_BIG();
UNLOCK_SMALL(); STRINGSHARE_UNLOCK_SMALL();
return EINA_TRUE; return EINA_TRUE;
@ -952,17 +952,17 @@ eina_stringshare_shutdown(void)
* *
* @see eina_thread_init() * @see eina_thread_init()
*/ */
void void
eina_stringshare_threads_init(void) eina_stringshare_threads_init(void)
{ {
_threads_activated = EINA_TRUE; _threads_activated = EINA_TRUE;
} }
/** /**
* @internal * @internal
* @brief Shut down the stringshare mutexs. * @brief Shut down the stringshare mutexs.
* *
* This function shuts down the mutexs in the stringshare module. * This function shuts down the mutexs in the stringshare module.
* It is called by eina_thread_shutdown(). * It is called by eina_thread_shutdown().
* *
* @see eina_thread_shutdown() * @see eina_thread_shutdown()
@ -970,7 +970,7 @@ eina_stringshare_threads_init(void)
void void
eina_stringshare_threads_shutdown(void) eina_stringshare_threads_shutdown(void)
{ {
_threads_activated = EINA_FALSE; _threads_activated = EINA_FALSE;
} }
#endif #endif
@ -1016,9 +1016,9 @@ eina_stringshare_add_length(const char *str, unsigned int slen)
return (const char *)_eina_stringshare_single + ((*str) << 1); return (const char *)_eina_stringshare_single + ((*str) << 1);
else if (slen < 4) else if (slen < 4)
{ {
LOCK_SMALL(); STRINGSHARE_LOCK_SMALL();
const char *s = _eina_stringshare_small_add(str, slen); const char *s = _eina_stringshare_small_add(str, slen);
UNLOCK_SMALL(); STRINGSHARE_UNLOCK_SMALL();
return s; return s;
} }
@ -1026,32 +1026,32 @@ eina_stringshare_add_length(const char *str, unsigned int slen)
hash_num = hash & 0xFF; hash_num = hash & 0xFF;
hash = (hash >> 8) & EINA_STRINGSHARE_MASK; hash = (hash >> 8) & EINA_STRINGSHARE_MASK;
LOCK_BIG(); STRINGSHARE_LOCK_BIG();
p_bucket = share->buckets + hash_num; p_bucket = share->buckets + hash_num;
ed = _eina_stringshare_find_hash(*p_bucket, hash); ed = _eina_stringshare_find_hash(*p_bucket, hash);
if (!ed) if (!ed)
{ {
const char *s = _eina_stringshare_add_head(p_bucket, hash, str, slen); const char *s = _eina_stringshare_add_head(p_bucket, hash, str, slen);
UNLOCK_BIG(); STRINGSHARE_UNLOCK_BIG();
return s; return s;
} }
EINA_MAGIC_CHECK_STRINGSHARE_HEAD(ed, UNLOCK_BIG(), NULL); EINA_MAGIC_CHECK_STRINGSHARE_HEAD(ed, STRINGSHARE_UNLOCK_BIG(), NULL);
el = _eina_stringshare_head_find(ed, str, slen); el = _eina_stringshare_head_find(ed, str, slen);
if (el) if (el)
{ {
EINA_MAGIC_CHECK_STRINGSHARE_NODE(el, UNLOCK_BIG()); EINA_MAGIC_CHECK_STRINGSHARE_NODE(el, STRINGSHARE_UNLOCK_BIG());
el->references++; el->references++;
UNLOCK_BIG(); STRINGSHARE_UNLOCK_BIG();
return el->str; return el->str;
} }
el = _eina_stringshare_node_alloc(slen); el = _eina_stringshare_node_alloc(slen);
if (!el) if (!el)
{ {
UNLOCK_BIG(); STRINGSHARE_UNLOCK_BIG();
return NULL; return NULL;
} }
@ -1060,7 +1060,7 @@ eina_stringshare_add_length(const char *str, unsigned int slen)
ed->head = el; ed->head = el;
_eina_stringshare_population_head_add(ed); _eina_stringshare_population_head_add(ed);
UNLOCK_BIG(); STRINGSHARE_UNLOCK_BIG();
return el->str; return el->str;
} }
@ -1150,19 +1150,19 @@ eina_stringshare_ref(const char *str)
{ {
_eina_stringshare_population_add(slen); _eina_stringshare_population_add(slen);
LOCK_SMALL(); STRINGSHARE_LOCK_SMALL();
const char *s = _eina_stringshare_small_add(str, slen); const char *s = _eina_stringshare_small_add(str, slen);
UNLOCK_SMALL(); STRINGSHARE_UNLOCK_SMALL();
return s; return s;
} }
LOCK_BIG(); STRINGSHARE_LOCK_BIG();
node = _eina_stringshare_node_from_str(str); node = _eina_stringshare_node_from_str(str);
node->references++; node->references++;
DBG("str=%p (%s) refs=%u", str, str, node->references); DBG("str=%p (%s) refs=%u", str, str, node->references);
UNLOCK_BIG(); STRINGSHARE_UNLOCK_BIG();
_eina_stringshare_population_add(node->length); _eina_stringshare_population_add(node->length);
@ -1207,20 +1207,20 @@ eina_stringshare_del(const char *str)
return; return;
else if (slen < 4) else if (slen < 4)
{ {
LOCK_SMALL(); STRINGSHARE_LOCK_SMALL();
_eina_stringshare_small_del(str, slen); _eina_stringshare_small_del(str, slen);
UNLOCK_SMALL(); STRINGSHARE_UNLOCK_SMALL();
return; return;
} }
LOCK_BIG(); STRINGSHARE_LOCK_BIG();
node = _eina_stringshare_node_from_str(str); node = _eina_stringshare_node_from_str(str);
if (node->references > 1) if (node->references > 1)
{ {
node->references--; node->references--;
DBG("str=%p (%s) refs=%u", str, str, node->references); DBG("str=%p (%s) refs=%u", str, str, node->references);
UNLOCK_BIG(); STRINGSHARE_UNLOCK_BIG();
return; return;
} }
@ -1237,7 +1237,7 @@ eina_stringshare_del(const char *str)
if (!ed) if (!ed)
goto on_error; goto on_error;
EINA_MAGIC_CHECK_STRINGSHARE_HEAD(ed, UNLOCK_BIG()); EINA_MAGIC_CHECK_STRINGSHARE_HEAD(ed, STRINGSHARE_UNLOCK_BIG());
if (!_eina_stringshare_head_remove_node(ed, node)) if (!_eina_stringshare_head_remove_node(ed, node))
goto on_error; goto on_error;
@ -1250,12 +1250,12 @@ eina_stringshare_del(const char *str)
else else
_eina_stringshare_population_head_del(ed); _eina_stringshare_population_head_del(ed);
UNLOCK_BIG(); STRINGSHARE_UNLOCK_BIG();
return; return;
on_error: on_error:
UNLOCK_BIG(); STRINGSHARE_UNLOCK_BIG();
/* possible segfault happened before here, but... */ /* possible segfault happened before here, but... */
CRITICAL("EEEK trying to del non-shared stringshare \"%s\"", str); CRITICAL("EEEK trying to del non-shared stringshare \"%s\"", str);
} }
@ -1345,8 +1345,8 @@ eina_iterator_array_check(const Eina_Rbtree *rbtree __UNUSED__, Eina_Stringshare
{ {
Eina_Stringshare_Node *node; Eina_Stringshare_Node *node;
LOCK_SMALL(); STRINGSHARE_LOCK_SMALL();
LOCK_BIG(); STRINGSHARE_LOCK_BIG();
fdata->used += sizeof(Eina_Stringshare_Head); fdata->used += sizeof(Eina_Stringshare_Head);
for (node = head->head; node; node = node->next) for (node = head->head; node; node = node->next)
@ -1360,8 +1360,8 @@ eina_iterator_array_check(const Eina_Rbtree *rbtree __UNUSED__, Eina_Stringshare
fdata->unique++; fdata->unique++;
} }
UNLOCK_BIG(); STRINGSHARE_UNLOCK_BIG();
UNLOCK_SMALL(); STRINGSHARE_UNLOCK_SMALL();
return EINA_TRUE; return EINA_TRUE;
} }
@ -1387,11 +1387,11 @@ eina_stringshare_dump(void)
printf("DDD: len ref string\n"); printf("DDD: len ref string\n");
printf("DDD:-------------------\n"); printf("DDD:-------------------\n");
LOCK_SMALL(); STRINGSHARE_LOCK_SMALL();
_eina_stringshare_small_dump(&di); _eina_stringshare_small_dump(&di);
UNLOCK_SMALL(); STRINGSHARE_UNLOCK_SMALL();
LOCK_BIG(); STRINGSHARE_LOCK_BIG();
for (i = 0; i < EINA_STRINGSHARE_BUCKETS; i++) for (i = 0; i < EINA_STRINGSHARE_BUCKETS; i++)
{ {
if (!share->buckets[i]) continue; if (!share->buckets[i]) continue;
@ -1420,7 +1420,7 @@ eina_stringshare_dump(void)
fprintf(stderr, "DDD: %i strings of length %i, max strings: %i\n", population_group[i].count, i, population_group[i].max); fprintf(stderr, "DDD: %i strings of length %i, max strings: %i\n", population_group[i].count, i, population_group[i].max);
#endif #endif
UNLOCK_BIG(); STRINGSHARE_UNLOCK_BIG();
} }
/** /**