@@ -4177,11 +4177,27 @@ INTERCEPTOR(int, pthread_mutex_unlock, void *m) {
4177
4177
4178
4178
#if SANITIZER_INTERCEPT___PTHREAD_MUTEX
4179
4179
INTERCEPTOR (int , __pthread_mutex_lock, void *m) {
4180
- return WRAP (pthread_mutex_lock)(m);
4180
+ void *ctx;
4181
+ COMMON_INTERCEPTOR_ENTER (ctx, __pthread_mutex_lock, m);
4182
+ COMMON_INTERCEPTOR_MUTEX_PRE_LOCK (ctx, m);
4183
+ int res = REAL (__pthread_mutex_lock)(m);
4184
+ if (res == errno_EOWNERDEAD)
4185
+ COMMON_INTERCEPTOR_MUTEX_REPAIR (ctx, m);
4186
+ if (res == 0 || res == errno_EOWNERDEAD)
4187
+ COMMON_INTERCEPTOR_MUTEX_POST_LOCK (ctx, m);
4188
+ if (res == errno_EINVAL)
4189
+ COMMON_INTERCEPTOR_MUTEX_INVALID (ctx, m);
4190
+ return res;
4181
4191
}
4182
4192
4183
4193
INTERCEPTOR (int , __pthread_mutex_unlock, void *m) {
4184
- return WRAP (pthread_mutex_unlock)(m);
4194
+ void *ctx;
4195
+ COMMON_INTERCEPTOR_ENTER (ctx, __pthread_mutex_unlock, m);
4196
+ COMMON_INTERCEPTOR_MUTEX_UNLOCK (ctx, m);
4197
+ int res = REAL (__pthread_mutex_unlock)(m);
4198
+ if (res == errno_EINVAL)
4199
+ COMMON_INTERCEPTOR_MUTEX_INVALID (ctx, m);
4200
+ return res;
4185
4201
}
4186
4202
4187
4203
#define INIT___PTHREAD_MUTEX_LOCK \
0 commit comments