tsan: fix deadlock in pthread_atfork callbacks
We take report/thread_registry locks around fork. This means we cannot report any bugs in atfork handlers. We resolved this by enabling per-thread ignores around fork. This resolved some of the cases, but not all. The added test triggers a race report from a signal handler called from atfork callback, we reset per-thread ignores around signal handlers, so we tried to report it and deadlocked. But there are more cases: a signal handler can be called synchronously if it's sent to itself. Or any other report types would cause deadlocks as well: mutex misuse, signal handler spoiling errno, etc. Disable all reports for the duration of fork with thr->suppress_reports and don't re-enable them around signal handlers. Reviewed By: vitalybuka Differential Revision: https://reviews.llvm.org/D101154
Loading
Please sign in to comment