libmultipath: fix race in stop_io_err_stat_thread
authorMartin Wilck <mwilck@suse.com>
Tue, 6 Mar 2018 21:18:41 +0000 (22:18 +0100)
committerChristophe Varoqui <christophe.varoqui@opensvc.com>
Wed, 7 Mar 2018 09:42:24 +0000 (10:42 +0100)
commitf835f438ee84018722f8fc9b7745632948a93e5d
tree0fc0e95947dfc33d99b0b23330acc77cc18f035a
parent24f2844de845fde8c257a9b3a0c5778c09ef2b46
libmultipath: fix race in stop_io_err_stat_thread

It's wrong, and unnecessary, to call pthread_kill after
pthread_cancel. I have observed cases where the io_err checker
thread hung in libpthread after receiving the USR2 signal, in particular
when multipathd is run under strace. (If multipathd is killed with
SIGINT under strace, and the io_error thread is running, it happens
almost every time). If this happens, the io_err thread
tries to obtain a mutex in the urcu code (presumably rcu_unregister_thread())
and the main thread hangs in pthread_join().

With the change from this patch, the thread is shut down cleanly. I haven't
observed the hang under strace with the patch.

Signed-off-by: Martin Wilck <mwilck@suse.com>
libmultipath/io_err_stat.c