summaryrefslogtreecommitdiff
path: root/examples/redis-unstable/src/tsan.sup
blob: 904ea6b33ff8e9eba26aa40120045cc73a12b822 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# collect_stacktrace_data() calls backtrace() from a signal handler but
# backtrace() is signal-unsafe since it might allocate memory, at least on
# glibc 2.39 it does through a call to _dl_map_object_deps().
signal:collect_stacktrace_data
signal:printCrashReport
# TODO Investigate this race in jemalloc probably related to
# https://github.com/jemalloc/jemalloc/issues/2621
race:malloc_mutex_trylock_final

# A race can happen on conn->last_errno if replica client is reading/writing
# data in IO thread and main thread is calling connAddrPeerName for some reason
# (f.e genRedisInfoString/roleCommand...).
# Not worth the additional code for synchronization as:
# - errno is thread-safe according to POSIX std
# - we don't support systems that allow word tearing, i.e last_errno value would
#   be a correct value at the end - either the errno from main or from IO thread
# - even if we fix the data race on last_errno we still have the problem of it
#   being set to either errno unless we pause the IO thread during main-thread's
#   execution which would incur too big of a cost.
# - the race happens rarely
race:connSocketAddr