Browse Source

fix(asan/thread): fix asan issue

GitOrigin-RevId: 8e2b093fb1
release-1.2
Megvii Engine Team 4 years ago
parent
commit
469d0808f5
2 changed files with 12 additions and 6 deletions
  1. +6
    -0
      src/core/impl/utils/thread.cpp
  2. +6
    -6
      src/core/include/megbrain/utils/thread_impl_spinlock.h

+ 6
- 0
src/core/impl/utils/thread.cpp View File

@@ -18,6 +18,12 @@ using namespace mgb;
#if MGB_THREAD_SAFE
const std::thread::id RecursiveSpinlock::sm_none_owner = std::thread::id();

//! why not use initializer_list for global var, detail:
//! MGE-1738
RecursiveSpinlock::RecursiveSpinlock() {
m_owner = sm_none_owner;
}

void RecursiveSpinlock::lock() {
auto tid = std::this_thread::get_id();
if (m_owner.load(std::memory_order_relaxed) != tid) {


+ 6
- 6
src/core/include/megbrain/utils/thread_impl_spinlock.h View File

@@ -33,15 +33,15 @@ class Spinlock final: public NonCopyableObj {
};

//! recursive spinlock
class RecursiveSpinlock final: public NonCopyableObj {
class RecursiveSpinlock final : public NonCopyableObj {
static const std::thread::id sm_none_owner;
std::atomic<std::thread::id> m_owner{sm_none_owner};
std::atomic<std::thread::id> m_owner;
size_t m_recur_count = 0;

public:
void lock();
void unlock();
public:
RecursiveSpinlock();
void lock();
void unlock();
};

} // namespace mgb


Loading…
Cancel
Save