############################
# 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_57266c
  ThreadSanitizer:Race
  fun:thread_encoding_proc
}

{
  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_67957
  ThreadSanitizer:Race
  fun:Replace_memcpy
  fun:memcpy
  fun:Serialize
  fun:UserScriptMaster::ScriptReloader::RunLoad
}

{
  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_86507
  ThreadSanitizer:Race
  fun:VideoCaptureController::OnDeviceStopped
}

############################
# 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.*
}

{
  bug_84094_a  (Could be benign. See bug for details)
  ThreadSanitizer:Race
  ...
  fun:pcache1Fetch
  fun:sqlite3PcacheFetch
}

{
  bug_84094_b (Could be benign. See bug for details)
  ThreadSanitizer:Race
  fun:sqlite3StatusSet
  fun:pcache1Alloc
}

{
  bug_84094_c  (Could be benign. See bug for details)
  ThreadSanitizer:Race
  ...
  fun:pcache1Unpin
  fun:pcacheUnpin
  fun:sqlite3PcacheMakeClean
  fun:sqlite3PcacheCleanAll
}

{
  bug_84467 (Could be benign. See bug for details)
  ThreadSanitizer:Race
  fun:unixTempFileDir
}

{
  bug_84726_a
  ThreadSanitizer:Race
  fun:qsort_r
  fun:qsort
  fun:_xdg_mime_alias_read_from_file
}

{
  bug_84726_b
  ThreadSanitizer:Race
  fun:qsort_r
  fun:qsort
  fun:_cairo_bentley_ottmann_tessellate_polygon
}

############################
# 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
}

{
  Two writes, same value (ICU gLibCleanupFunctions[UCLN_UPLUG])
  ThreadSanitizer:Race
  fun:ucln_registerCleanup_46
  fun:uplug_init_46
  fun:u_init_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
# TODO(timurrr|oshima): following three suppression could be obsolete.
{
  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
}

# (Looks same as the one above)
{
  bug_84244
  ThreadSanitizer:Race
  fun:PR_ExitMonitor
  ...
  fun:nss*
}

{
  bug_86916
  ThreadSanitizer:Race
  fun:loopfilter_frame
  fun:loopfilter_thread
}

{
  bug_87062a
  ThreadSanitizer:Race
  fun:net::SdchManager::SdchManager
  fun:BrowserMain
}

{
  bug_87062b
  ThreadSanitizer:Race
  ...
  fun:net::SdchManager::*
  fun:net::URLRequestHttpJob::AddExtraHeaders
  fun:net::URLRequestHttpJob::Start
  fun:net::URLRequest::StartJob
  fun:net::URLRequest::Start
  fun:URLFetcher::Core::StartURLRequest
  fun:URLFetcher::Core::StartURLRequestWhenAppropriate
  fun:DispatchToMethod
}
{
  bug_87747
  ThreadSanitizer:Race
  fun:base::MessagePumpLibevent::FileDescriptorWatcher::~FileDescriptorWatcher
  fun:ProcessSingleton::LinuxWatcher::SocketReader::~SocketReader
  fun:ProcessSingleton::LinuxWatcher::RemoveSocketReader
  fun:ProcessSingleton::LinuxWatcher::SocketReader::FinishWithACK
  fun:ProcessSingleton::LinuxWatcher::HandleMessage
}
{
  bug_89295_a
  ThreadSanitizer:Race
  fun:base::internal::WeakReference::Flag::~Flag
  ...
  fun:ProfileIOData::~ProfileIOData
  fun:ProfileImplIOData::~ProfileImplIOData
  ...
  fun:scoped_refptr::~scoped_refptr
  fun:ChromeURLRequestContextGetter::~ChromeURLRequestContextGetter
  fun:DeleteTask::Run
}
{
  bug_89295_b
  ThreadSanitizer:Race
  fun:base::internal::WeakReference::Flag::Invalidate
  ...
  fun:base::SupportsWeakPtr::~SupportsWeakPtr
  fun:prerender::PrerenderManager::~PrerenderManager
}
{
  bug_92889
  ThreadSanitizer:Race
  fun:base::TimeTicks::operator=
  fun:ResourceDispatcherHost::OnUserGesture
  fun:TabContents::OnUserGesture
  fun:browser::Navigate
  fun:Browser::OpenURLFromTab
  fun:Browser::OpenURL
  fun:TestingAutomationProvider::NavigateToURLBlockUntilNavigationsComplete
  fun:DispatchToMethod
}

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

{
  tsanbug_62b
  ThreadSanitizer:Race
  fun:__GI_memcpy
}
