aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/asterisk/lock.h9
-rw-r--r--main/channel.c20
2 files changed, 21 insertions, 8 deletions
diff --git a/include/asterisk/lock.h b/include/asterisk/lock.h
index cc68a13aa..2570ee7bb 100644
--- a/include/asterisk/lock.h
+++ b/include/asterisk/lock.h
@@ -1196,18 +1196,21 @@ AST_INLINE_API(int ast_atomic_dec_and_test(volatile int *p),
struct ast_channel;
+#define ast_channel_lock(a) __ast_channel_lock(a, __FILE__, __LINE__, __PRETTY_FUNCTION__)
/*! \brief Lock AST channel (and print debugging output)
\note You need to enable DEBUG_CHANNEL_LOCKS for this function */
-int ast_channel_lock(struct ast_channel *chan);
+int __ast_channel_lock(struct ast_channel *chan, const char *file, int lineno, const char *func);
+#define ast_channel_unlock(a) __ast_channel_unlock(a, __FILE__, __LINE__, __PRETTY_FUNCTION__)
/*! \brief Unlock AST channel (and print debugging output)
\note You need to enable DEBUG_CHANNEL_LOCKS for this function
*/
-int ast_channel_unlock(struct ast_channel *chan);
+int __ast_channel_unlock(struct ast_channel *chan, const char *file, int lineno, const char *func);
+#define ast_channel_trylock(a) __ast_channel_trylock(a, __FILE__, __LINE__, __PRETTY_FUNCTION__)
/*! \brief Lock AST channel (and print debugging output)
\note You need to enable DEBUG_CHANNEL_LOCKS for this function */
-int ast_channel_trylock(struct ast_channel *chan);
+int __ast_channel_trylock(struct ast_channel *chan, const char *file, int lineno, const char *func);
#endif
#endif /* _ASTERISK_LOCK_H */
diff --git a/main/channel.c b/main/channel.c
index f61d365b7..d9ab77c38 100644
--- a/main/channel.c
+++ b/main/channel.c
@@ -4534,7 +4534,7 @@ const char *channelreloadreason2txt(enum channelreloadreason reason)
/*! \brief Unlock AST channel (and print debugging output)
\note You need to enable DEBUG_CHANNEL_LOCKS for this function
*/
-int ast_channel_unlock(struct ast_channel *chan)
+int __ast_channel_unlock(struct ast_channel *chan, const char *filename, int lineno, const char *func)
{
int res = 0;
if (option_debug > 2)
@@ -4545,8 +4545,11 @@ int ast_channel_unlock(struct ast_channel *chan)
ast_log(LOG_DEBUG, "::::==== Unlocking non-existing channel \n");
return 0;
}
-
+#ifdef DEBUG_THREADS
+ res = __ast_pthread_mutex_unlock(filename, lineno, func, "(channel lock)", &chan->lock);
+#else
res = ast_mutex_unlock(&chan->lock);
+#endif
if (option_debug > 2) {
#ifdef DEBUG_THREADS
@@ -4573,14 +4576,18 @@ int ast_channel_unlock(struct ast_channel *chan)
/*! \brief Lock AST channel (and print debugging output)
\note You need to enable DEBUG_CHANNEL_LOCKS for this function */
-int ast_channel_lock(struct ast_channel *chan)
+int __ast_channel_lock(struct ast_channel *chan, const char *filename, int lineno, const char *func)
{
int res;
if (option_debug > 3)
ast_log(LOG_DEBUG, "====:::: Locking AST channel %s\n", chan->name);
+#ifdef DEBUG_THREADS
+ res = __ast_pthread_mutex_lock(filename, lineno, func, "(channel lock)", &chan->lock);
+#else
res = ast_mutex_lock(&chan->lock);
+#endif
if (option_debug > 3) {
#ifdef DEBUG_THREADS
@@ -4605,14 +4612,17 @@ int ast_channel_lock(struct ast_channel *chan)
/*! \brief Lock AST channel (and print debugging output)
\note You need to enable DEBUG_CHANNEL_LOCKS for this function */
-int ast_channel_trylock(struct ast_channel *chan)
+int __ast_channel_trylock(struct ast_channel *chan, const char *filename, int lineno, const char *func)
{
int res;
if (option_debug > 2)
ast_log(LOG_DEBUG, "====:::: Trying to lock AST channel %s\n", chan->name);
-
+#ifdef DEBUG_THREADS
+ res = __ast_pthread_mutex_trylock(filename, lineno, func, "(channel lock)", &chan->lock);
+#else
res = ast_mutex_trylock(&chan->lock);
+#endif
if (option_debug > 2) {
#ifdef DEBUG_THREADS