diff options
Diffstat (limited to 'libsanitizer/asan/asan_lock.h')
-rw-r--r-- | libsanitizer/asan/asan_lock.h | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/libsanitizer/asan/asan_lock.h b/libsanitizer/asan/asan_lock.h new file mode 100644 index 00000000000..2392e3c0e7b --- /dev/null +++ b/libsanitizer/asan/asan_lock.h @@ -0,0 +1,40 @@ +//===-- asan_lock.h ---------------------------------------------*- C++ -*-===// +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file is a part of AddressSanitizer, an address sanity checker. +// +// A wrapper for a simple lock. +//===----------------------------------------------------------------------===// +#ifndef ASAN_LOCK_H +#define ASAN_LOCK_H + +#include "sanitizer_common/sanitizer_mutex.h" +#include "asan_internal.h" + +// The locks in ASan are global objects and they are never destroyed to avoid +// at-exit races (that is, a lock is being used by other threads while the main +// thread is doing atexit destructors). +// We define the class using opaque storage to avoid including system headers. + +namespace __asan { + +class AsanLock { + public: + explicit AsanLock(LinkerInitialized); + void Lock(); + void Unlock(); + bool IsLocked() { return owner_ != 0; } + private: + uptr opaque_storage_[10]; + uptr owner_; // for debugging and for malloc_introspection_t interface +}; + +typedef GenericScopedLock<AsanLock> ScopedLock; + +} // namespace __asan + +#endif // ASAN_LOCK_H |