/*!
* \brief Mark the last lock as acquired
*/
-void ast_mark_lock_acquired(void);
+void ast_mark_lock_acquired(void *lock_addr);
/*!
* \brief Mark the last lock as failed (trylock)
*/
-void ast_mark_lock_failed(void);
+void ast_mark_lock_failed(void *lock_addr);
/*!
* \brief remove lock info for the current thread
}
ast_reentrancy_unlock(t);
if (t->track)
- ast_mark_lock_acquired();
+ ast_mark_lock_acquired(&t->mutex);
} else {
if (t->track)
ast_remove_lock_info(&t->mutex);
}
ast_reentrancy_unlock(t);
if (t->track)
- ast_mark_lock_acquired();
+ ast_mark_lock_acquired(&t->mutex);
} else if (t->track) {
- ast_mark_lock_failed();
+ ast_mark_lock_failed(&t->mutex);
}
return res;
ast_store_lock_info(AST_RDLOCK, file, line, func, name, lock);
res = pthread_rwlock_rdlock(lock);
if (!res)
- ast_mark_lock_acquired();
+ ast_mark_lock_acquired(lock);
else
ast_remove_lock_info(lock);
return res;
ast_store_lock_info(AST_WRLOCK, file, line, func, name, lock);
res = pthread_rwlock_wrlock(lock);
if (!res)
- ast_mark_lock_acquired();
+ ast_mark_lock_acquired(lock);
else
ast_remove_lock_info(lock);
return res;
ast_store_lock_info(AST_RDLOCK, file, line, func, name, lock);
res = pthread_rwlock_tryrdlock(lock);
if (!res)
- ast_mark_lock_acquired();
+ ast_mark_lock_acquired(lock);
else
ast_remove_lock_info(lock);
return res;
ast_store_lock_info(AST_WRLOCK, file, line, func, name, lock);
res = pthread_rwlock_trywrlock(lock);
if (!res)
- ast_mark_lock_acquired();
+ ast_mark_lock_acquired(lock);
else
ast_remove_lock_info(lock);
return res;
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;
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;
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);
}