diff options
Diffstat (limited to 'main/utils.c')
-rw-r--r-- | main/utils.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/main/utils.c b/main/utils.c index f309d87a1..755789c72 100644 --- a/main/utils.c +++ b/main/utils.c @@ -633,7 +633,7 @@ void ast_store_lock_info(enum ast_lock_type type, const char *filename, pthread_mutex_unlock(&lock_info->lock); } -void ast_mark_lock_acquired(void) +void ast_mark_lock_acquired(void *lock_addr) { struct thr_lock_info *lock_info; @@ -641,11 +641,13 @@ void ast_mark_lock_acquired(void) return; pthread_mutex_lock(&lock_info->lock); - lock_info->locks[lock_info->num_locks - 1].pending = 0; + if (lock_info->locks[lock_info->num_locks - 1].lock_addr == lock_addr) { + lock_info->locks[lock_info->num_locks - 1].pending = 0; + } pthread_mutex_unlock(&lock_info->lock); } -void ast_mark_lock_failed(void) +void ast_mark_lock_failed(void *lock_addr) { struct thr_lock_info *lock_info; @@ -653,8 +655,10 @@ void ast_mark_lock_failed(void) return; pthread_mutex_lock(&lock_info->lock); - lock_info->locks[lock_info->num_locks - 1].pending = -1; - lock_info->locks[lock_info->num_locks - 1].times_locked--; + if (lock_info->locks[lock_info->num_locks - 1].lock_addr == lock_addr) { + lock_info->locks[lock_info->num_locks - 1].pending = -1; + lock_info->locks[lock_info->num_locks - 1].times_locked--; + } pthread_mutex_unlock(&lock_info->lock); } |