# There are a few kinds of suppressions in this file. # 1. third party stuff we have no control over # # 2. intentional unit test errors, or stuff that is somehow a false positive # in our own code, or stuff that is so trivial it's not worth fixing # # 3. Suppressions for real chromium bugs that are not yet fixed. # These should all be in chromium's bug tracking system (but a few aren't yet). # Periodically we should sweep this file and the bug tracker clean by # running overnight and removing outdated bugs/suppressions. #----------------------------------------------------------------------- # 1. third party stuff we have no control over ############################ # 1.1 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 races below thread-safe time-conversion functions { fun:__tz* ThreadSanitizer:Race fun:__tz* } { 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* } ############################ # 1.2 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 } ############################ # 1.3 Benign races 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 } { 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 } ############################ # 1.4 Real races in third_party { Nvidia GL driver destroys an invalid lock ThreadSanitizer:InvalidLock fun:pthread_mutex_destroy obj:*nvidia*/libGL.so.* } # http://code.google.com/p/v8/issues/detail?id=361 { V8: race on Locker::active_ ThreadSanitizer:Race fun:v8::Locker::* } { 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* } { 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 } # 2. intentional unit test errors, or stuff that is somehow a false positive ############################ # 2.1 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 } ############################ # 2.2 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* } # 3. Suppressions for real chromium bugs that are not yet fixed. ############################ # 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 } { 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_89141 ThreadSanitizer:Race fun:base::Thread::message_loop fun:BrowserThread::IsMessageLoopValid fun:ThreadWatcherList::StartWatching fun:ThreadWatcherList::InitializeAndStartWatching } ############################ # TSan false positives { bug_93708_a ThreadSanitizer:Race fun:WTF::StringImplBase::ref fun:WTF::String::String fun:WebCore::KURLGooglePrivate::KURLGooglePrivate fun:WebCore::KURL::KURL fun:WebCore::WorkerContext::WorkerContext fun:WebCore::DedicatedWorkerContext::DedicatedWorkerContext fun:WebCore::DedicatedWorkerContext::create fun:WebCore::DedicatedWorkerThread::createWorkerContext fun:WebCore::WorkerThread::workerThread fun:WebCore::WorkerThread::workerThreadStart fun:WTF::threadEntryPoint } { bug_93708_b ThreadSanitizer:Race fun:WebCore::KURLGooglePrivate::~KURLGooglePrivate fun:WebCore::KURL::~KURL fun:WebCore::WorkerScriptLoader::~WorkerScriptLoader fun:WTF::RefCounted::deref fun:WTF::RefPtr::clear fun:WTF::RefPtr::operator= fun:WebCore::Worker::notifyFinished fun:WebCore::WorkerScriptLoader::notifyFinished fun:WebCore::WorkerScriptLoader::didFinishLoading fun:WebCore::DocumentThreadableLoader::didFinishLoading fun:WebCore::DocumentThreadableLoader::didFinishLoading fun:WebCore::SubresourceLoader::didFinishLoading fun:WebCore::ResourceLoader::didFinishLoading fun:WebCore::ResourceHandleInternal::didFinishLoading fun:webkit_glue::WebURLLoaderImpl::Context::OnCompletedRequest fun:ResourceDispatcher::OnRequestComplete } { bug_93757 ThreadSanitizer:Race fun:__memset_sse2 fun:VisitedLinkMaster::CreateURLTable } { bug_93932_a ThreadSanitizer:Race ... fun:frame_thread_free fun:ff_thread_free fun:avcodec_close fun:avcodec_close fun:media::FFmpegVideoDecodeEngine::~FFmpegVideoDecodeEngine fun:scoped_ptr::reset fun:media::FFmpegVideoDecodeEngineTest::~FFmpegVideoDecodeEngineTest } { bug_93932_b ThreadSanitizer:Race ... fun:ff_thread_decode_frame fun:avcodec_decode_video2 ... fun:media::FFmpegVideoDecodeEngine::DecodeFrame fun:media::FFmpegVideoDecodeEngine::ConsumeVideoSample fun:media::DemuxCompleteActionP2::gmock_Impl::gmock_PerformImpl fun:testing::internal::ActionHelper::Perform fun:media::DemuxCompleteActionP2::gmock_Impl::Perform fun:testing::Action::Perform fun:testing::internal::ActionResultHolder::PerformAction fun:testing::internal::FunctionMockerBase::UntypedPerformAction fun:testing::internal::UntypedFunctionMockerBase::UntypedInvokeWith fun:testing::internal::FunctionMockerBase::InvokeWith fun:testing::internal::FunctionMocker::Invoke fun:media::FFmpegVideoDecodeEngineTest::ProduceVideoSample fun:media::FFmpegVideoDecodeEngine::ReadInput } { bug_93932_c ThreadSanitizer:Race fun:Replace_memcpy fun:memcpy fun:media::CopyPlane fun:media::Copy*Plane fun:media::FFmpegVideoDecodeEngine::DecodeFrame fun:media::FFmpegVideoDecodeEngine::ConsumeVideoSample fun:media::DemuxCompleteActionP2::gmock_Impl::gmock_PerformImpl fun:testing::internal::ActionHelper::Perform fun:media::DemuxCompleteActionP2::gmock_Impl::Perform fun:testing::Action::Perform fun:testing::internal::ActionResultHolder::PerformAction fun:testing::internal::FunctionMockerBase::UntypedPerformAction fun:testing::internal::UntypedFunctionMockerBase::UntypedInvokeWith fun:testing::internal::FunctionMockerBase::InvokeWith fun:testing::internal::FunctionMocker::Invoke fun:media::FFmpegVideoDecodeEngineTest::ProduceVideoSample fun:media::FFmpegVideoDecodeEngine::ReadInput } { bug_93932_d ThreadSanitizer:Race fun:frame_worker_thread } { bug_93932_e ThreadSanitizer:Race ... fun:frame_thread_free fun:avcodec_close fun:media::FFmpegVideoDecodeEngine::~FFmpegVideoDecodeEngine fun:scoped_ptr::reset fun:media::FFmpegVideoDecodeEngineTest::~FFmpegVideoDecodeEngineTest } { bug_95509 ThreadSanitizer:Race fun:base::SyncSocket::Close fun:AudioRendererImpl::OnStop fun:media::AudioRendererBase::Stop fun:media::CompositeFilter::CallFilter fun:media::CompositeFilter::SerialCallback }