Merge branch 'locking-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull locking fixes from Ingo Molnar: "A liblockdep fix and a mutex_unlock() mutex-debugging fix" * 'locking-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: mutex: Always clear owner field upon mutex_unlock() tools/liblockdep: Fix debug_check thinko in mutex destroy
This commit is contained in:
Коммит
1e6c3e8f8f
|
@ -80,13 +80,13 @@ void debug_mutex_unlock(struct mutex *lock)
|
||||||
DEBUG_LOCKS_WARN_ON(lock->owner != current);
|
DEBUG_LOCKS_WARN_ON(lock->owner != current);
|
||||||
|
|
||||||
DEBUG_LOCKS_WARN_ON(!lock->wait_list.prev && !lock->wait_list.next);
|
DEBUG_LOCKS_WARN_ON(!lock->wait_list.prev && !lock->wait_list.next);
|
||||||
mutex_clear_owner(lock);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* __mutex_slowpath_needs_to_unlock() is explicitly 0 for debug
|
* __mutex_slowpath_needs_to_unlock() is explicitly 0 for debug
|
||||||
* mutexes so that we can do it here after we've verified state.
|
* mutexes so that we can do it here after we've verified state.
|
||||||
*/
|
*/
|
||||||
|
mutex_clear_owner(lock);
|
||||||
atomic_set(&lock->count, 1);
|
atomic_set(&lock->count, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -317,7 +317,7 @@ int pthread_mutex_destroy(pthread_mutex_t *mutex)
|
||||||
*
|
*
|
||||||
* TODO: Hook into free() and add that check there as well.
|
* TODO: Hook into free() and add that check there as well.
|
||||||
*/
|
*/
|
||||||
debug_check_no_locks_freed(mutex, mutex + sizeof(*mutex));
|
debug_check_no_locks_freed(mutex, sizeof(*mutex));
|
||||||
__del_lock(__get_lock(mutex));
|
__del_lock(__get_lock(mutex));
|
||||||
return ll_pthread_mutex_destroy(mutex);
|
return ll_pthread_mutex_destroy(mutex);
|
||||||
}
|
}
|
||||||
|
@ -341,7 +341,7 @@ int pthread_rwlock_destroy(pthread_rwlock_t *rwlock)
|
||||||
{
|
{
|
||||||
try_init_preload();
|
try_init_preload();
|
||||||
|
|
||||||
debug_check_no_locks_freed(rwlock, rwlock + sizeof(*rwlock));
|
debug_check_no_locks_freed(rwlock, sizeof(*rwlock));
|
||||||
__del_lock(__get_lock(rwlock));
|
__del_lock(__get_lock(rwlock));
|
||||||
return ll_pthread_rwlock_destroy(rwlock);
|
return ll_pthread_rwlock_destroy(rwlock);
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче