############################
# Real races in Chromium
{
  bug_23433
  ThreadSanitizer:Race
  fun:*logging*SetMinLogLevel*
}

{
  bug_24419
  ThreadSanitizer:Race
  fun:*BrowserProcessImpl*nspector*iles*
}

{
  bug_37496
  ThreadSanitizer:Race
  ...
  fun:*browser_sync*SyncShareIntercept*Observe*
}

{
  bug_41314
  ThreadSanitizer:Race
  ...
  fun:base::LaunchApp*
  fun:ChildProcessLauncher::Context::LaunchInternal*
}

{
  bug_46642a
  ThreadSanitizer:Race
  fun:*media*PipelineImpl*InitializeTask*
}

{
  bug_46642b
  ThreadSanitizer:Race
  fun:*media*PipelineImpl*GetCurrentTime*
}

{
  bug_57266a
  ThreadSanitizer:Race
  ...
  fun:*vp8*_*
}

{
  bug_57266b
  ThreadSanitizer:Race
  ...
  obj:*libffmpegsumo.*
  fun:ThreadSanitizerStartThread
}

{
  bug_62880
  ThreadSanitizer:Race
  fun:ObserverListBase*Iterator*
  fun:browser_sync::sessions::SyncSessionContext::NotifyListeners*
  ...
  fun:browser_sync::SyncerThread::*
}

{
  bug_64075a
  ThreadSanitizer:Race
  fun:disk_cache::EntryImpl::GetDataSize*
  fun:net::HttpCache::Transaction::*
}

{
  bug_64075b
  ThreadSanitizer:Race
  fun:disk_cache::EntryImpl::UpdateSize*
  ...
  fun:disk_cache::EntryImpl::WriteDataImpl*
}

{
  bug_66994a
  ThreadSanitizer:Race
  fun:HistoryURLProvider::Stop*
  ...
  fun:AutocompleteController::St*
}

{
  bug_66994b
  ThreadSanitizer:Race
  ...
  fun:HistoryURLProvider::ExecuteWithDB*
}

{
  bug_67957
  ThreadSanitizer:Race
  fun:Replace_memcpy
  fun:memcpy
  fun:Serialize*
  fun:UserScriptMaster::ScriptReloader::RunScan*
}

{
  bug_72169a
  ThreadSanitizer:Race
  fun:base::Thread::ThreadMain*
}

{
  bug_72169b
  ThreadSanitizer:Race
  fun:base::Thread::message_loop*
  ...
  fun:*::InotifyReader::OnInotifyEvent*
}

{
  bug_72548
  ThreadSanitizer:Race
  ...
  fun:JSC::Yarr::Interpreter::*Disjunction*
  fun:JSC::Yarr::Interpreter::interpret*
  fun:JSC::Yarr::interpret*
}

{
  bug_72913
  ThreadSanitizer:Race
  ...
  fun:ObserverListBase*
  ...
  fun:sync_api::SyncManager::SyncInternal::*
  fun:syncable::BaseTransaction::*
  fun:syncable::BaseTransaction::*
}

############################
# Benign races in Chromium
{
  bug_61179 [benign race on tracked_objects::Births]
  ThreadSanitizer:Race
  fun:tracked_objects::Births::*Birth*
}

{
  bug_62694 [benign races in Histogram in CookieMonster]
  ThreadSanitizer:Race
  ...
  fun:base::Histogram::*
  fun:net::CookieMonster::*
}

{
  bug_64185a [probably-benign races in Histogram in skia::ImageOperations]
  ThreadSanitizer:Race
  ...
  fun:base::Histogram::*
  fun:skia::ImageOperations::*
}

{
  bug_64185b [probably-benign races in Histogram in skia::ImageOperations]
  ThreadSanitizer:Race
  ...
  fun:base::Histogram::*
  fun:HistogramSynchronizer::DeserializeHistogramList*
}

{
  bug_71634
  ThreadSanitizer:Race
  fun:gdk_x_error
  ...
  fun:ui::GetWindowGeometry*
}

############################
# Real races in third_party
{
  bug_23244 (libevent)
  ThreadSanitizer:Race
  fun:event_*
  fun:event_*
}

{
  bug_28396 (libevent) (1)
  ThreadSanitizer:Race
  fun:detect_monotonic
  fun:event_base_new
}

{
  bug_28396 (libevent) (2)
  ThreadSanitizer:Race
  fun:gettime
  fun:event_base_loop
}

{
  bug_28765 (tcmalloc)
  ThreadSanitizer:Race
  ...
  fun:*tcmalloc*ThreadCache*DeleteCache*
}

{
  bug_40244
  ThreadSanitizer:Race
  fun:*WebDataService*WebDataRequest*Cancel*
  fun:*WebDataService*
}

{
  bug_53192
  ThreadSanitizer:UnlockNonLocked
  fun:pthread_mutex_unlock
  fun:talk_base::CriticalSection::Leave*
  fun:talk_base::CritScope::~CritScope*
  fun:talk_base::PosixSignalDeliveryDispatcher::ClearOwner*
  fun:talk_base::PhysicalSocketServer::~PhysicalSocketServer*
  fun:scoped_ptr*::~scoped_ptr*
  fun:talk_base::MessageQueue::~MessageQueue*
  fun:talk_base::Thread::~Thread*
  fun:talk_base::ThreadManager::UnwrapCurrentThread*
  fun:talk_base::ThreadManager::~ThreadManager*
  fun:__tcf_0
  fun:exit
}

{
  bug_70938
  ThreadSanitizer:Race
  ...
  obj:*libdbus*
}

{
  Nvidia GL driver destroys an invalid lock
  ThreadSanitizer:InvalidLock
  fun:pthread_mutex_destroy
  obj:*nvidia*/libGL.so.*
}

############################
# Data races in tests

{
  bug_30582
  ThreadSanitizer:Race
  fun:*LongCallbackD*
  fun:*WorkerThreadTickerTest_LongCallback_Test*TestBody*
}

{
  bug_61731
  ThreadSanitizer:Race
  fun:*Log*
  ...
  fun:*Worker*
  ...
  obj:*ipc_tests
}

{
  bug_68481 [test-only race on bool]
  ThreadSanitizer:Race
  fun:tracked_objects::ThreadData::StartTracking*
  fun:tracked_objects::TrackedObjectsTest_MinimalStartupShutdown_Test::TestBody*
}

# TODO(timurrrr): bug item
{
  Data race on bool in AssertReporter [test-only]
  ThreadSanitizer:Race
  ...
  fun:*AssertReporter*warn*
}

# TODO(timurrrr): bug item
{
  Data race on WatchdogCounter [test-only]
  ThreadSanitizer:Race
  ...
  fun:*WatchdogCounter*larm*
}

# TODO(timurrrr): bug item
{
  Data race on counter in WorkQueue [test-only]
  ThreadSanitizer:Race
  ...
  fun:*WorkQueue*
}

# TODO(timurrrr): bug item
{
  Data race on vfptr in base/watchdog_unittest
  ThreadSanitizer:Race
  ...
  fun:*WatchdogTest_*arm*Test_Test*TestBody*
}

# TODO(timurrrr): bug item
{
  Data race on vfptr in base/thread_unittest
  ThreadSanitizer:Race
  ...
  fun:*ThreadTest_SleepInsideInit*TestBody*
}

# TODO(timurrrr): bug item
{
  Data race on bool in chrome/browser/net/url_fetcher_unittest (1)
  ThreadSanitizer:Race
  fun:*URLFetcherCancelTest*TestContextReleased*
}
{
  Data race on bool in chrome/browser/net/url_fetcher_unittest (2)
  ThreadSanitizer:Race
  fun:*CancelTestURLRequestContext*CancelTestURLRequestContext*
}

{
   ThreadSanitizer sanity test (ToolsSanityTest.DataRace).
   ThreadSanitizer:Race
   fun:*TOOLS_SANITY_TEST_CONCURRENT_THREAD*ThreadMain*
}

{
   Benign race (or even a false positive) on atomics in ThreadCollisionWarner
   ThreadSanitizer:Race
   fun:base::subtle::NoBarrier_Store
   fun:base::ThreadCollisionWarner::Leave
}

############################
# Benign races in ICU
{
  Two writes, same value (ICU gGlobalMutex, gMutexesInUse)
  ThreadSanitizer:Race
  ...
  fun:umtx_init_46
}

{
  Two writes, same value (ICU gHeapInUse)
  ThreadSanitizer:Race
  fun:uprv_malloc_46
}

# Reading a pointer to a mutex being initialized in a concurrent thread.
{
  A benign race in umtx_lock_46
  ThreadSanitizer:Race
  fun:umtx_lock_46
}

############################
# Benign race in SQLLite
{
  Two writes, same value (SQLLite pthreadMutexAlloc)
  ThreadSanitizer:Race
  ...
  fun:pthreadMutexAlloc
  fun:sqlite3MutexAlloc
}

{
  Two writes, same value (under sqlite3Malloc)
  ThreadSanitizer:Race
  ...
  fun:sqlite3Malloc*
}

{
  Two writes, same value (sqlite3_initialize)
  ThreadSanitizer:Race
  fun:sqlite3_initialize
  fun:openDatabase
}

############################
# Races in V8

# http://code.google.com/p/v8/issues/detail?id=361
{
  Race on Locker::active_ in v8
  ThreadSanitizer:Race
  fun:v8::Locker::*
}

############################
# Benign races in libc

# A benign race inside the implementation of internal libc mutex
{
  Benign races in __lll_*lock_*_private
  ThreadSanitizer:Race
  fun:__lll_*lock_*_private
}

# Benign race below thread-safe time-conversion functions
{
  fun:__tz*
  ThreadSanitizer:Race
  fun:__tz*
}

# Benign race below thread-safe time-conversion functions
{
  fun:tzset*
  ThreadSanitizer:Race
  ...
  fun:tzset*
}

# Benign race in thread-safe function
{
  fun:mkstemp*
  ThreadSanitizer:Race
  ...
  fun:mkstemp*
}

# We already ignore memory accesses inside ld
# but we also need to ignore accesses below it.
{
  fun:_dl_close
  ThreadSanitizer:Race
  ...
  fun:_dl_close
}

# fprintf is thread-safe. The benign races happen on the internal lock.
{
  Benign race below fprintf (1)
  ThreadSanitizer:Race
  ...
  fun:buffered_vfprintf
  ...
  fun:fprintf
}

{
  Benign race below fprintf (2)
  ThreadSanitizer:Race
  fun:new_do_write
  fun:vfprintf
}

{
  fun:timegm
  ThreadSanitizer:Race
  ...
  fun:timegm
}

{
  fun:mktime
  ThreadSanitizer:Race
  ...
  fun:mktime
}

{
  Benign race in nss (PR_EnterMonitor)
  ThreadSanitizer:Race
  fun:PR_EnterMonitor
}

############################
# TSan false positives
{
  tsanbug_62a
  ThreadSanitizer:Race
  fun:__memset_sse2
}

{
  tsanbug_62b
  ThreadSanitizer:Race
  fun:__GI_memcpy
}

{
  bug_70085a
  ThreadSanitizer:Race
  fun:WebCore::ResourceResponseBase::~ResourceResponseBase*
  fun:WebCore::ResourceResponse::~ResourceResponse*
  ...
  fun:WebCore::DocumentLoader::~DocumentLoader*
  fun:WebKit::WebDataSourceImpl::~WebDataSourceImpl*
}

{
  bug_70085b
  ThreadSanitizer:Race
  ...
  fun:WTF::ThreadSafeRefCounted*::deref*
}

{
  bug_70085c
  ThreadSanitizer:Race
  fun:WebCore::WorkerScriptController::forbidExecution*
  fun:WebCore::WorkerThread::stop*
  fun:WebKit::WebWorkerBase::stopWorkerThread*
  fun:WebKit::WebWorkerImpl::terminateWorkerContext*
  fun:WebWorkerStub::OnTerminateWorkerContext*
}
