From 60cd00f6b7347bcc196dd74b30ba896526dbf2ff Mon Sep 17 00:00:00 2001 From: Mark Michelson Date: Thu, 12 Feb 2009 16:35:30 +0000 Subject: [PATCH] Merged revisions 175121 via svnmerge from https://origsvn.digium.com/svn/asterisk/trunk ........ r175121 | mmichelson | 2009-02-12 10:28:06 -0600 (Thu, 12 Feb 2009) | 11 lines Make lock information for ao2_trylock be more useful and gnarly Core show locks information involving an ao2_trylock did not show the function that called ao2_trylock, but would instead show ao2_trylock as the source of the lock. This is not useful when trying to debug locking issues. One bizarre note is that this logic is already in 1.4 but somehow did not get merged to trunk or the 1.6.X branches. ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.6.1@175123 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- include/asterisk/astobj2.h | 5 +++++ main/astobj2.c | 11 ++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/include/asterisk/astobj2.h b/include/asterisk/astobj2.h index 3f5f5347b1..1311b3fe84 100644 --- a/include/asterisk/astobj2.h +++ b/include/asterisk/astobj2.h @@ -478,7 +478,12 @@ int _ao2_unlock(void *a, const char *file, const char *func, int line, const cha * \param a A pointer to the object we want to lock. * \return 0 on success, other values on error. */ +#ifndef DEBUG_THREADS int ao2_trylock(void *a); +#else +#define ao2_trylock(a) _ao2_trylock(a, __FILE__, __PRETTY_FUNCTION__, __LINE__, #a) +int _ao2_trylock(void *a, const char *file, const char *func, int line, const char *var); +#endif /*! \brief * Return the lock address of an object diff --git a/main/astobj2.c b/main/astobj2.c index e5bf76f457..2e749a99be 100644 --- a/main/astobj2.c +++ b/main/astobj2.c @@ -183,14 +183,23 @@ int _ao2_unlock(void *user_data, const char *file, const char *func, int line, c #endif } +#ifndef DEBUG_THREADS int ao2_trylock(void *user_data) +#else +int _ao2_trylock(void *user_data, const char *file, const char *func, int line, const char *var) +#endif { struct astobj2 *p = INTERNAL_OBJ(user_data); int ret; if (p == NULL) return -1; - ret = ast_mutex_trylock(&p->priv_data.lock); +#ifndef DEBUG_THREADS + ret = ast_mutex_trylock(&p->priv_data.lock); +#else + ret = __ast_pthread_mutex_trylock(file, line, func, var, &p->priv_data.lock); +#endif + #ifdef AO2_DEBUG if (!ret) ast_atomic_fetchadd_int(&ao2.total_locked, 1);