Skip to content

Commit 97e0fd2

Browse files
committed
Don't forward __pthread_mutex_* interceptors to pthread_mutex_* version
Summary: Allows to use rr with asan Fixes PR41095 Reviewers: eugenis Subscribers: jfb, #sanitizers, llvm-commits Tags: #sanitizers, #llvm Differential Revision: https://reviews.llvm.org/D70581
1 parent e62555c commit 97e0fd2

File tree

1 file changed

+18
-2
lines changed

1 file changed

+18
-2
lines changed

compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4177,11 +4177,27 @@ INTERCEPTOR(int, pthread_mutex_unlock, void *m) {
41774177

41784178
#if SANITIZER_INTERCEPT___PTHREAD_MUTEX
41794179
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;
41814191
}
41824192

41834193
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;
41854201
}
41864202

41874203
#define INIT___PTHREAD_MUTEX_LOCK \

0 commit comments

Comments
 (0)