diff options
author | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-06-03 18:26:51 +0000 |
---|---|---|
committer | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-06-03 18:26:51 +0000 |
commit | 869f8f957397b54cefd8c618a7655081b6d3b0ac (patch) | |
tree | 96804416e94a5415a44f5ae0e03b3d2417c4a544 /main | |
parent | cf2e050e19cb3acbd24f3ed35568c2d4c60cbfcf (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.c | 6 | ||||
-rw-r--r-- | main/utils.c | 11 |
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); } |