12d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines//===-- tsan_ignoreset.cc -------------------------------------------------===// 22d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// 32d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// The LLVM Compiler Infrastructure 42d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// 52d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// This file is distributed under the University of Illinois Open Source 62d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// License. See LICENSE.TXT for details. 72d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// 82d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines//===----------------------------------------------------------------------===// 92d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// 102d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// This file is a part of ThreadSanitizer (TSan), a race detector. 112d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// 122d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines//===----------------------------------------------------------------------===// 132d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include "tsan_ignoreset.h" 142d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 152d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesnamespace __tsan { 162d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 172d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesconst uptr IgnoreSet::kMaxSize; 182d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 192d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen HinesIgnoreSet::IgnoreSet() 202d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines : size_() { 212d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines} 222d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 232d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesvoid IgnoreSet::Add(u32 stack_id) { 242d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines if (size_ == kMaxSize) 252d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines return; 262d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines for (uptr i = 0; i < size_; i++) { 272d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines if (stacks_[i] == stack_id) 282d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines return; 292d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines } 302d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines stacks_[size_++] = stack_id; 312d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines} 322d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 332d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesvoid IgnoreSet::Reset() { 342d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines size_ = 0; 352d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines} 362d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 372d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesuptr IgnoreSet::Size() const { 382d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines return size_; 392d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines} 402d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 412d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesu32 IgnoreSet::At(uptr i) const { 422d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines CHECK_LT(i, size_); 432d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines CHECK_LE(size_, kMaxSize); 442d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines return stacks_[i]; 452d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines} 462d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 472d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines} // namespace __tsan 48