mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-05 12:16:00 +00:00
Improve the lock tracking code a bit so that a bunch of old locks that threads
failed to lock don't sit around in the history. When a lock is first locked, this checks to see if the last lock in the list was one that was failed to be locked. If it is, then that was a lock that we're no longer sitting in a trylock loop trying to lock, so just remove it. (inspired by issue #11712) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@104102 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
11
main/utils.c
11
main/utils.c
@@ -610,7 +610,16 @@ void ast_store_lock_info(enum ast_lock_type type, const char *filename,
|
||||
pthread_mutex_unlock(&lock_info->lock);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (i && lock_info->locks[i].pending == -1) {
|
||||
/* The last lock on the list was one that this thread tried to lock but
|
||||
* failed at doing so. It has now moved on to something else, so remove
|
||||
* the old lock from the list. */
|
||||
i--;
|
||||
lock_info->num_locks--;
|
||||
memset(&lock_info->locks[i], 0, sizeof(lock_info->locks[0]));
|
||||
}
|
||||
|
||||
lock_info->locks[i].file = filename;
|
||||
lock_info->locks[i].line_num = line_num;
|
||||
lock_info->locks[i].func = func;
|
||||
|
Reference in New Issue
Block a user