diff options
-rw-r--r-- | include/asterisk/astobj2.h | 5 | ||||
-rw-r--r-- | main/astobj2.c | 11 |
2 files changed, 15 insertions, 1 deletions
diff --git a/include/asterisk/astobj2.h b/include/asterisk/astobj2.h index 040f6726a..1484d2bd0 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 21dc92733..8e33f94ae 100644 --- a/main/astobj2.c +++ b/main/astobj2.c @@ -188,14 +188,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); |