mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-21 12:54:56 +00:00
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: https://origsvn.digium.com/svn/asterisk/trunk@120064 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
11
main/utils.c
11
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);
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user