forked from OSchip/llvm-project
[sanitizer] Lock/Unlock stack store on fork
Reviewed By: dvyukov Differential Revision: https://reviews.llvm.org/D115210
This commit is contained in:
parent
bb8632c1ef
commit
81f9dc8eee
|
@ -108,6 +108,14 @@ uptr StackStore::Pack(Compression type) {
|
|||
return res;
|
||||
}
|
||||
|
||||
void StackStore::LockAll() {
|
||||
for (BlockInfo &b : blocks_) b.Lock();
|
||||
}
|
||||
|
||||
void StackStore::UnlockAll() {
|
||||
for (BlockInfo &b : blocks_) b.Unlock();
|
||||
}
|
||||
|
||||
void StackStore::TestOnlyUnmap() {
|
||||
for (BlockInfo &b : blocks_) b.TestOnlyUnmap(this);
|
||||
internal_memset(this, 0, sizeof(*this));
|
||||
|
|
|
@ -46,6 +46,9 @@ class StackStore {
|
|||
// Returns the number of released bytes.
|
||||
uptr Pack(Compression type);
|
||||
|
||||
void LockAll();
|
||||
void UnlockAll();
|
||||
|
||||
void TestOnlyUnmap();
|
||||
|
||||
private:
|
||||
|
@ -106,6 +109,8 @@ class StackStore {
|
|||
void TestOnlyUnmap(StackStore *store);
|
||||
bool Stored(uptr n);
|
||||
bool IsPacked() const;
|
||||
void Lock() NO_THREAD_SAFETY_ANALYSIS { mtx_.Lock(); }
|
||||
void Unlock() NO_THREAD_SAFETY_ANALYSIS { mtx_.Unlock(); }
|
||||
};
|
||||
|
||||
BlockInfo blocks_[kBlockCount] = {};
|
||||
|
|
|
@ -113,9 +113,11 @@ StackTrace StackDepotGet(u32 id) {
|
|||
|
||||
void StackDepotLockAll() {
|
||||
theDepot.LockAll();
|
||||
stackStore.LockAll();
|
||||
}
|
||||
|
||||
void StackDepotUnlockAll() {
|
||||
stackStore.UnlockAll();
|
||||
theDepot.UnlockAll();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue