The "mysql_real_connect" function is used by MySQL clients, including multi-threaded clients, to connect to a MySQL server. The "mysql_real_connect" function is allowed to be run by concurrent threads without application level serialization. Unfortunately, the thread sanitizer found a data race in the "mysql_real_connect" function when processing the …
[Read more]
InnoDB and the Thread
Sanitizer do not work well together in MySQL 5.7. There are hundreds of possible
data races reported by the Thread Sanitizer in the InnoDB code
for the simplest case of initializing the MySQL server and
shutting it down. Luckily, most of these data races are
benign. The problem of finding an interesting data race in
the InnoDB software is similar to finding evidence of a
sub-atomic particle in a particle accelerator; many Thread
Sanitizer events must be analyzed before something interesting is
found.
One example of a benign data race is InnoDB's implementation of
fuzzy counters. A …
This blog continues the investigation into possible data races in the MySQL server reported by the Thread Sanitizer. The previous blog investigated several possible data races that were detected when the MySQL server is initialized. This blog investigates three data races in the performance schema that are reported when the MySQL server is shut down. The first data race is a racy increment of thread statistics. The second data race is a problem that may leave the state of the performance schema memory allocator incorrect. The final data race is in the lock …
[Read more]The MySQL server is a large multi-threaded program primarily written in the C++ programming language. Unfortunately, data races and deadlocks in concurrent C++ programs are common. Fortunately, the Thread Sanitizer can be used to find data races and deadlocks. MySQL 5.7 does not support the Thread Sanitizer, but is is easy to add to the MySQL configuration using a simple build procedure. When MySQL 5.7 is built with the Thread Sanitizer and database …
[Read more]
When MySQL 5.7.8 is built and run with the Thread
Sanitizer, one of the first issues reported is a data race
with MySQL's use of pthread barrier wait and pthread barrier destroy. The data race
report is:
WARNING: ThreadSanitizer: data race (pid=30104)
Write of size 1 at 0x7ffd33054298 by main thread:
#0 pthread_barrier_destroy
/home/rfp/llvm/projects/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc:1236
(mysqld+0x000000d5a71b) #1 start_helper_thread …