[compiler-rt] Add a critical section when flushing gcov counters
authorCalixte Denizet <calixte.denizet@gmail.com>
Tue, 3 Dec 2019 09:32:25 +0000 (10:32 +0100)
committerCalixte Denizet <calixte.denizet@gmail.com>
Mon, 9 Dec 2019 09:39:55 +0000 (10:39 +0100)
commit88f5bf77f92899b19fdafdffc7b060f930c1cb8b
treef88abd486ce42b9359a977ede5bfda619d9dd202
parentf6e05672f6566a8d7efc4aed6473319e7115f979
[compiler-rt] Add a critical section when flushing gcov counters

Summary:
Counters can be flushed in a multi-threaded context for example when the process is forked in different threads (https://github.com/llvm/llvm-project/blob/master/llvm/lib/Transforms/Instrumentation/GCOVProfiling.cpp#L632-L663).
In order to avoid pretty bad things, a critical section is needed around the flush.
We had a lot of crashes in this code in Firefox CI when we switched to clang for linux ccov builds and those crashes disappeared with this patch.

Reviewers: marco-c, froydnj, dmajor, davidxl

Reviewed By: marco-c, dmajor

Subscribers: froydnj, dmajor, dberris, jfb, #sanitizers, llvm-commits, sylvestre.ledru

Tags: #sanitizers, #llvm

Differential Revision: https://reviews.llvm.org/D70910
compiler-rt/lib/profile/GCDAProfiling.c