.. | .. |
---|
7 | 7 | |
---|
8 | 8 | struct liblockdep_pthread_mutex { |
---|
9 | 9 | pthread_mutex_t mutex; |
---|
| 10 | + struct lock_class_key key; |
---|
10 | 11 | struct lockdep_map dep_map; |
---|
11 | 12 | }; |
---|
12 | 13 | |
---|
.. | .. |
---|
27 | 28 | return pthread_mutex_init(&lock->mutex, __mutexattr); |
---|
28 | 29 | } |
---|
29 | 30 | |
---|
30 | | -#define liblockdep_pthread_mutex_init(mutex, mutexattr) \ |
---|
31 | | -({ \ |
---|
32 | | - static struct lock_class_key __key; \ |
---|
33 | | - \ |
---|
34 | | - __mutex_init((mutex), #mutex, &__key, (mutexattr)); \ |
---|
| 31 | +#define liblockdep_pthread_mutex_init(mutex, mutexattr) \ |
---|
| 32 | +({ \ |
---|
| 33 | + lockdep_register_key(&(mutex)->key); \ |
---|
| 34 | + __mutex_init((mutex), #mutex, &(mutex)->key, (mutexattr)); \ |
---|
35 | 35 | }) |
---|
36 | 36 | |
---|
37 | 37 | static inline int liblockdep_pthread_mutex_lock(liblockdep_pthread_mutex_t *lock) |
---|
.. | .. |
---|
42 | 42 | |
---|
43 | 43 | static inline int liblockdep_pthread_mutex_unlock(liblockdep_pthread_mutex_t *lock) |
---|
44 | 44 | { |
---|
45 | | - lock_release(&lock->dep_map, 0, (unsigned long)_RET_IP_); |
---|
| 45 | + lock_release(&lock->dep_map, (unsigned long)_RET_IP_); |
---|
46 | 46 | return pthread_mutex_unlock(&lock->mutex); |
---|
47 | 47 | } |
---|
48 | 48 | |
---|
.. | .. |
---|
54 | 54 | |
---|
55 | 55 | static inline int liblockdep_pthread_mutex_destroy(liblockdep_pthread_mutex_t *lock) |
---|
56 | 56 | { |
---|
| 57 | + lockdep_reset_lock(&lock->dep_map); |
---|
| 58 | + lockdep_unregister_key(&lock->key); |
---|
57 | 59 | return pthread_mutex_destroy(&lock->mutex); |
---|
58 | 60 | } |
---|
59 | 61 | |
---|