aboutsummaryrefslogtreecommitdiffstats
path: root/main
diff options
context:
space:
mode:
authorrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2008-06-03 18:26:51 +0000
committerrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2008-06-03 18:26:51 +0000
commit869f8f957397b54cefd8c618a7655081b6d3b0ac (patch)
tree96804416e94a5415a44f5ae0e03b3d2417c4a544 /main
parentcf2e050e19cb3acbd24f3ed35568c2d4c60cbfcf (diff)
Add lock tracking for rwlocks. Previously, lock.h only had the ability to
hold tracking information for mutexes. Now, the "core show locks" output will output information about who is holding a rwlock when a thread is waiting on it. (closes issue #11279) Reported by: ys Patches: trunk_lock_utils.v8.diff uploaded by ys (license 281) git-svn-id: http://svn.digium.com/svn/asterisk/trunk@120064 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main')
-rw-r--r--main/channel.c6
-rw-r--r--main/utils.c11
2 files changed, 9 insertions, 8 deletions
diff --git a/main/channel.c b/main/channel.c
index 6b100ff36..00b7eaf72 100644
--- a/main/channel.c
+++ b/main/channel.c
@@ -4988,7 +4988,7 @@ int __ast_channel_unlock(struct ast_channel *chan, const char *filename, int lin
if (option_debug > 2) {
#ifdef DEBUG_THREADS
int count = 0;
- if ((count = chan->lock_dont_use.reentrancy))
+ if ((count = chan->lock_dont_use.track.reentrancy))
ast_debug(3, ":::=== Still have %d locks (recursive)\n", count);
#endif
if (!res)
@@ -5022,7 +5022,7 @@ int __ast_channel_lock(struct ast_channel *chan, const char *filename, int linen
if (option_debug > 3) {
#ifdef DEBUG_THREADS
int count = 0;
- if ((count = chan->lock_dont_use.reentrancy))
+ if ((count = chan->lock_dont_use.track.reentrancy))
ast_debug(4, ":::=== Now have %d locks (recursive)\n", count);
#endif
if (!res)
@@ -5054,7 +5054,7 @@ int __ast_channel_trylock(struct ast_channel *chan, const char *filename, int li
if (option_debug > 2) {
#ifdef DEBUG_THREADS
int count = 0;
- if ((count = chan->lock_dont_use.reentrancy))
+ if ((count = chan->lock_dont_use.track.reentrancy))
ast_debug(3, ":::=== Now have %d locks (recursive)\n", count);
#endif
if (!res)
diff --git a/main/utils.c b/main/utils.c
index b6230da7b..c1a297034 100644
--- a/main/utils.c
+++ b/main/utils.c
@@ -790,6 +790,7 @@ static void append_lock_information(struct ast_str **str, struct thr_lock_info *
{
int j;
ast_mutex_t *lock;
+ struct ast_lock_track *lt;
ast_str_append(str, 0, "=== ---> %sLock #%d (%s): %s %d %s %s %p (%d)\n",
lock_info->locks[i].pending > 0 ? "Waiting for " :
@@ -812,13 +813,13 @@ static void append_lock_information(struct ast_str **str, struct thr_lock_info *
return;
lock = lock_info->locks[i].lock_addr;
-
- ast_reentrancy_lock(lock);
- for (j = 0; *str && j < lock->reentrancy; j++) {
+ lt = &lock->track;
+ ast_reentrancy_lock(lt);
+ for (j = 0; *str && j < lt->reentrancy; j++) {
ast_str_append(str, 0, "=== --- ---> Locked Here: %s line %d (%s)\n",
- lock->file[j], lock->lineno[j], lock->func[j]);
+ lt->file[j], lt->lineno[j], lt->func[j]);
}
- ast_reentrancy_unlock(lock);
+ ast_reentrancy_unlock(lt);
}