HomePhabricator

[scudo] Correct a behavior on the shared TSD registry

Description

[scudo] Correct a behavior on the shared TSD registry

Summary:
There is an error in the shared TSD registry logic when looking for a
TSD in the slow path. There is an unlikely event when a TSD's precedence
was 0 after attempting a tryLock which indicated that it was grabbed
by another thread in between. We dealt with that case by continuing to
the next iteration, but that meant that the Index was not increased
and we ended up trying to lock the same TSD.
This would manifest in heavy contention, and in the end we would still
lock a TSD, but that was a wasted iteration.
So, do not continue, just skip the TSD as a potential candidate.

This is in both the standalone & non-standalone versions.

Reviewers: morehouse, eugenis, vitalybuka, hctim

Reviewed By: morehouse

Subscribers: delcypher, #sanitizers, llvm-commits

Tags: #llvm, #sanitizers

Differential Revision: https://reviews.llvm.org/D63783

Details

Committed
cryptoadJun 25 2019, 12:58 PM
Reviewer
morehouse
Differential Revision
D63783: [scudo] Correct a behavior on the shared TSD registry
Branches
Unknown
Tags
Unknown