forked from OSchip/llvm-project
[NFC][lsan] Refactor LockThreadRegistry/LockAllocator calls
This commit is contained in:
parent
aa407c102d
commit
061f22dda9
|
@ -224,6 +224,22 @@ bool WordIsPoisoned(uptr addr);
|
|||
// Wrappers for ThreadRegistry access.
|
||||
void LockThreadRegistry() NO_THREAD_SAFETY_ANALYSIS;
|
||||
void UnlockThreadRegistry() NO_THREAD_SAFETY_ANALYSIS;
|
||||
|
||||
struct ScopedStopTheWorldLock {
|
||||
ScopedStopTheWorldLock() {
|
||||
LockThreadRegistry();
|
||||
LockAllocator();
|
||||
}
|
||||
|
||||
~ScopedStopTheWorldLock() {
|
||||
UnlockAllocator();
|
||||
UnlockThreadRegistry();
|
||||
}
|
||||
|
||||
ScopedStopTheWorldLock &operator=(const ScopedStopTheWorldLock &) = delete;
|
||||
ScopedStopTheWorldLock(const ScopedStopTheWorldLock &) = delete;
|
||||
};
|
||||
|
||||
ThreadRegistry *GetThreadRegistryLocked();
|
||||
bool GetThreadRangesLocked(tid_t os_id, uptr *stack_begin, uptr *stack_end,
|
||||
uptr *tls_begin, uptr *tls_end, uptr *cache_begin,
|
||||
|
|
|
@ -58,8 +58,7 @@ int ExitHook(int status) {
|
|||
|
||||
void LockStuffAndStopTheWorld(StopTheWorldCallback callback,
|
||||
CheckForLeaksParam *argument) {
|
||||
LockThreadRegistry();
|
||||
LockAllocator();
|
||||
ScopedStopTheWorldLock lock;
|
||||
|
||||
struct Params {
|
||||
InternalMmapVector<uptr> allocator_caches;
|
||||
|
@ -149,9 +148,6 @@ void LockStuffAndStopTheWorld(StopTheWorldCallback callback,
|
|||
params->callback(SuspendedThreadsListFuchsia(), params->argument);
|
||||
},
|
||||
¶ms);
|
||||
|
||||
UnlockAllocator();
|
||||
UnlockThreadRegistry();
|
||||
}
|
||||
|
||||
} // namespace __lsan
|
||||
|
|
|
@ -122,12 +122,9 @@ void HandleLeaks() {
|
|||
|
||||
static int LockStuffAndStopTheWorldCallback(struct dl_phdr_info *info,
|
||||
size_t size, void *data) {
|
||||
LockThreadRegistry();
|
||||
LockAllocator();
|
||||
ScopedStopTheWorldLock lock;
|
||||
DoStopTheWorldParam *param = reinterpret_cast<DoStopTheWorldParam *>(data);
|
||||
StopTheWorld(param->callback, param->argument);
|
||||
UnlockAllocator();
|
||||
UnlockThreadRegistry();
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -195,11 +195,8 @@ void HandleLeaks() {}
|
|||
|
||||
void LockStuffAndStopTheWorld(StopTheWorldCallback callback,
|
||||
CheckForLeaksParam *argument) {
|
||||
LockThreadRegistry();
|
||||
LockAllocator();
|
||||
ScopedStopTheWorldLock lock;
|
||||
StopTheWorld(callback, argument);
|
||||
UnlockAllocator();
|
||||
UnlockThreadRegistry();
|
||||
}
|
||||
|
||||
} // namespace __lsan
|
||||
|
|
Loading…
Reference in New Issue