Todd Lipcon has submitted this change and it was merged. Change subject: KUDU-1992. striped64: don't heap-allocate the threadlocal hashcode ......................................................................
KUDU-1992. striped64: don't heap-allocate the threadlocal hashcode KUDU-1992 describes a bug in which the destructor of one threadlocal object ended up referring to another threadlocal object. Specifically, a threadlocal cached block destructor ended up incrementing a metric which was implemented by a LongAdder (inheriting from Striped64). The LongAdder uses a threadlocal hashcode to avoid contention. In the crash described in the bug, the striped64's TLS hashcode was destructed before the other destructor ran, causing a heap-use-after-free. This patch should fix the issue by making the threadlocal hashcode be a POD threadlocal rather than a pointer to a heap-allocated object. Thus there is no destructor to run, and no chance that the destruction order can cause this crash. This fix seemed simpler than trying to ensure some specific ordering of threadlocal destructors (eg by assigning destructor priorities or adding some kind of dependency graph). Before the patch, I was able to reproduce the crash 2/1000 times running RaftConsensusITest.TestAutoCreateReplica. After the patch, I ran it 5000 times with no failures. Change-Id: I2d4e5264134c70ced434c3ae8da5866a151464d5 Reviewed-on: http://gerrit.cloudera.org:8080/6791 Reviewed-by: Adar Dembo <[email protected]> Tested-by: Kudu Jenkins --- M src/kudu/util/striped64.cc M src/kudu/util/striped64.h 2 files changed, 26 insertions(+), 28 deletions(-) Approvals: Adar Dembo: Looks good to me, approved Kudu Jenkins: Verified -- To view, visit http://gerrit.cloudera.org:8080/6791 To unsubscribe, visit http://gerrit.cloudera.org:8080/settings Gerrit-MessageType: merged Gerrit-Change-Id: I2d4e5264134c70ced434c3ae8da5866a151464d5 Gerrit-PatchSet: 3 Gerrit-Project: kudu Gerrit-Branch: master Gerrit-Owner: Todd Lipcon <[email protected]> Gerrit-Reviewer: Adar Dembo <[email protected]> Gerrit-Reviewer: Kudu Jenkins Gerrit-Reviewer: Tidy Bot Gerrit-Reviewer: Todd Lipcon <[email protected]>
