forked from OSchip/llvm-project
tsan: give debug names to dense allocators
Improves crash message on dense alloc overflow. Allows to understand what alloc overflowed. llvm-svn: 307780
This commit is contained in:
parent
7323f7ac63
commit
5abf9bb1ca
|
@ -39,7 +39,7 @@ class DenseSlabAlloc {
|
|||
typedef DenseSlabAllocCache Cache;
|
||||
typedef typename Cache::IndexT IndexT;
|
||||
|
||||
DenseSlabAlloc() {
|
||||
explicit DenseSlabAlloc(const char *name) {
|
||||
// Check that kL1Size and kL2Size are sane.
|
||||
CHECK_EQ(kL1Size & (kL1Size - 1), 0);
|
||||
CHECK_EQ(kL2Size & (kL2Size - 1), 0);
|
||||
|
@ -49,6 +49,7 @@ class DenseSlabAlloc {
|
|||
internal_memset(map_, 0, sizeof(map_));
|
||||
freelist_ = 0;
|
||||
fillpos_ = 0;
|
||||
name_ = name;
|
||||
}
|
||||
|
||||
~DenseSlabAlloc() {
|
||||
|
@ -96,15 +97,19 @@ class DenseSlabAlloc {
|
|||
SpinMutex mtx_;
|
||||
IndexT freelist_;
|
||||
uptr fillpos_;
|
||||
const char *name_;
|
||||
|
||||
void Refill(Cache *c) {
|
||||
SpinMutexLock lock(&mtx_);
|
||||
if (freelist_ == 0) {
|
||||
if (fillpos_ == kL1Size) {
|
||||
Printf("ThreadSanitizer: DenseSlabAllocator overflow. Dying.\n");
|
||||
Printf("ThreadSanitizer: %s overflow (%zu*%zu). Dying.\n",
|
||||
name_, kL1Size, kL2Size);
|
||||
Die();
|
||||
}
|
||||
T *batch = (T*)MmapOrDie(kL2Size * sizeof(T), "DenseSlabAllocator");
|
||||
VPrintf(2, "ThreadSanitizer: growing %s: %zu out of %zu*%zu\n",
|
||||
name_, fillpos_, kL1Size, kL2Size);
|
||||
T *batch = (T*)MmapOrDie(kL2Size * sizeof(T), name_);
|
||||
// Reserve 0 as invalid index.
|
||||
IndexT start = fillpos_ == 0 ? 1 : 0;
|
||||
for (IndexT i = start; i < kL2Size; i++) {
|
||||
|
|
|
@ -104,7 +104,8 @@ Context::Context()
|
|||
, racy_stacks(MBlockRacyStacks)
|
||||
, racy_addresses(MBlockRacyAddresses)
|
||||
, fired_suppressions_mtx(MutexTypeFired, StatMtxFired)
|
||||
, fired_suppressions(8) {
|
||||
, fired_suppressions(8)
|
||||
, clock_alloc("clock allocator") {
|
||||
}
|
||||
|
||||
// The objects are allocated in TLS, so one may rely on zero-initialization.
|
||||
|
|
|
@ -53,7 +53,9 @@ void SyncVar::Reset(Processor *proc) {
|
|||
}
|
||||
}
|
||||
|
||||
MetaMap::MetaMap() {
|
||||
MetaMap::MetaMap()
|
||||
: block_alloc_("heap block allocator")
|
||||
, sync_alloc_("sync allocator") {
|
||||
atomic_store(&uid_gen_, 0, memory_order_relaxed);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue