[PATCH] D100348: [hwasan] Fix lock contention on thread creation.
Evgenii Stepanov via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 14 12:41:20 PDT 2021
eugenis updated this revision to Diff 337524.
eugenis marked an inline comment as done.
eugenis added a comment.
addressed comments
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D100348/new/
https://reviews.llvm.org/D100348
Files:
compiler-rt/lib/hwasan/hwasan_thread_list.h
Index: compiler-rt/lib/hwasan/hwasan_thread_list.h
===================================================================
--- compiler-rt/lib/hwasan/hwasan_thread_list.h
+++ compiler-rt/lib/hwasan/hwasan_thread_list.h
@@ -86,17 +86,22 @@
}
Thread *CreateCurrentThread() {
- Thread *t;
+ Thread *t = nullptr;
{
SpinMutexLock l(&list_mutex_);
if (!free_list_.empty()) {
t = free_list_.back();
free_list_.pop_back();
- uptr start = (uptr)t - ring_buffer_size_;
- internal_memset((void *)start, 0, ring_buffer_size_ + sizeof(Thread));
- } else {
- t = AllocThread();
}
+ }
+ if (t) {
+ uptr start = (uptr)t - ring_buffer_size_;
+ internal_memset((void *)start, 0, ring_buffer_size_ + sizeof(Thread));
+ } else {
+ t = AllocThread();
+ }
+ {
+ SpinMutexLock l(&list_mutex_);
live_list_.push_back(t);
}
t->Init((uptr)t - ring_buffer_size_, ring_buffer_size_);
@@ -124,10 +129,10 @@
void ReleaseThread(Thread *t) {
RemoveThreadStats(t);
t->Destroy();
+ DontNeedThread(t);
SpinMutexLock l(&list_mutex_);
RemoveThreadFromLiveList(t);
free_list_.push_back(t);
- DontNeedThread(t);
}
Thread *GetThreadByBufferAddress(uptr p) {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D100348.337524.patch
Type: text/x-patch
Size: 1291 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210414/965c4cb2/attachment.bin>
More information about the llvm-commits
mailing list