TestBrowserThreadBundle terminates the scheduler while there's still some work to do on it. |
||
Issue descriptionI'm hitting the following error while working on https://codereview.chromium.org/2888743002 [ RUN ] URLLoaderFactoryImplTest/URLLoaderFactoryImplTest.DownloadToFileFailure/0 Backtrace: base::internal::`anonymous namespace'::SchedulerSequencedTaskRunner::PostDelayedTask [0x0676E16A+170] (c:\src\chrome2\src\base\task_scheduler\scheduler_worker_pool_impl.cc:103) base::TaskRunner::PostTask [0x06751804+52] (c:\src\chrome2\src\base\task_runner.cc:47) storage::ScopedFile::Reset [0x05C215D4+324] (c:\src\chrome2\src\storage\browser\blob\scoped_file.cc:73) storage::ScopedFile::~ScopedFile [0x05C20E5F+15] (c:\src\chrome2\src\storage\browser\blob\scoped_file.cc:38) storage::ShareableFileReference::~ShareableFileReference [0x05C247A5+229] (c:\src\chrome2\src\storage\browser\blob\shareable_file_reference.cc:121) storage::ShareableFileReference::`vector deleting destructor' [0x05C24FAD+77] base::RefCounted<storage::BlobDataItem::DataHandle>::Release [0x05B92121+81] (c:\src\chrome2\src\base\memory\ref_counted.h:253) scoped_refptr<storage::ShareableFileReference>::Release [0x0831742F+15] (c:\src\chrome2\src\base\memory\ref_counted.h:573) scoped_refptr<storage::ShareableFileReference>::~scoped_refptr<storage::ShareableFileReference> [0x0830F75A+26] (c:\src\chrome2\src\base\memory\ref_counted.h:473) content::RedirectToFileResourceHandler::Writer::~Writer [0x08665972+18] (c:\src\chrome2\src\content\browser\loader\redirect_to_file_resource_handler.cc:96) content::RedirectToFileResourceHandler::Writer::`scalar deleting destructor' [0x08665CEF+15] content::RedirectToFileResourceHandler::Writer::DidClose [0x08665F85+37] (c:\src\chrome2\src\content\browser\loader\redirect_to_file_resource_handler.cc:117) base::internal::FunctorTraits<void (__thiscall content::RedirectToFileResourceHandler::Writer::*)(int),void>::Invoke<content::RedirectToFileResourceHandler::Writer *,int> [0x08664E11+33] (c:\src\chrome2\src\base\bind_internal.h:215) base::internal::InvokeHelper<0,void>::MakeItSo<void (__thiscall content::RedirectToFileResourceHandler::Writer::*const &)(int),content::RedirectToFileResourceHandler::Writer *,int> [0x08664FA1+49] (c:\src\chrome2\src\base\bind_internal.h:285) base::internal::Invoker<base::internal::BindState<void (__thiscall content::RedirectToFileResourceHandler::Writer::*)(int),base::internal::UnretainedWrapper<content::RedirectToFileResourceHandler::Writer> >,void __cdecl(int)>::RunImpl<void (__thiscall con [0x08665088+72] (c:\src\chrome2\src\base\bind_internal.h:361) base::internal::Invoker<base::internal::BindState<void (__thiscall content::RedirectToFileResourceHandler::Writer::*)(int),base::internal::UnretainedWrapper<content::RedirectToFileResourceHandler::Writer> >,void __cdecl(int)>::Run [0x08666F11+49] (c:\src\chrome2\src\base\bind_internal.h:339) base::Callback<void __cdecl(int),1,1>::Run [0x0C203AAE+46] (c:\src\chrome2\src\base\callback.h:80) net::`anonymous namespace'::CallInt64ToInt [0x0C26FDBF+15] (c:\src\chrome2\src\net\base\file_stream_context.cc:29) base::internal::FunctorTraits<void (__cdecl*)(base::Callback<void __cdecl(int),1,1> const &,__int64),void>::Invoke<base::Callback<void __cdecl(int),1,1> const &,__int64> [0x0C26CF76+38] (c:\src\chrome2\src\base\bind_internal.h:164) base::internal::InvokeHelper<0,void>::MakeItSo<void (__cdecl*const &)(base::Callback<void __cdecl(int),1,1> const &,__int64),base::Callback<void __cdecl(int),1,1> const &,__int64> [0x0C26D4A1+49] (c:\src\chrome2\src\base\bind_internal.h:285) base::internal::Invoker<base::internal::BindState<void (__cdecl*)(base::Callback<void __cdecl(int),1,1> const &,__int64),base::Callback<void __cdecl(int),1,1> >,void __cdecl(__int64)>::RunImpl<void (__cdecl*const &)(base::Callback<void __cdecl(int),1,1> c [0x0C26DF01+65] (c:\src\chrome2\src\base\bind_internal.h:361) base::internal::Invoker<base::internal::BindState<void (__cdecl*)(base::Callback<void __cdecl(int),1,1> const &,__int64),base::Callback<void __cdecl(int),1,1> >,void __cdecl(__int64)>::Run [0x0C270E91+49] (c:\src\chrome2\src\base\bind_internal.h:339) base::Callback<void __cdecl(__int64),1,1>::Run [0x0C270E3E+46] (c:\src\chrome2\src\base\callback.h:80) net::FileStream::Context::OnAsyncCompleted [0x0C27079A+106] (c:\src\chrome2\src\net\base\file_stream_context.cc:251) base::internal::FunctorTraits<void (__thiscall net::FileStream::Context::*)(base::Callback<void __cdecl(__int64),1,1> const &,net::FileStream::Context::IOResult const &),void>::Invoke<net::FileStream::Context *,base::Callback<void __cdecl(__int64),1,1> co [0x0C26D05C+44] (c:\src\chrome2\src\base\bind_internal.h:215) base::internal::InvokeHelper<0,void>::MakeItSo<void (__thiscall net::FileStream::Context::*const &)(base::Callback<void __cdecl(__int64),1,1> const &,net::FileStream::Context::IOResult const &),net::FileStream::Context *,base::Callback<void __cdecl(__int6 [0x0C26D64E+62] (c:\src\chrome2\src\base\bind_internal.h:285) base::internal::Invoker<base::internal::BindState<void (__thiscall net::FileStream::Context::*)(base::Callback<void __cdecl(__int64),1,1> const &,net::FileStream::Context::IOResult const &),base::internal::UnretainedWrapper<net::FileStream::Context>,base: [0x0C26E1B7+103] (c:\src\chrome2\src\base\bind_internal.h:361) base::internal::Invoker<base::internal::BindState<void (__thiscall net::FileStream::Context::*)(base::Callback<void __cdecl(__int64),1,1> const &,net::FileStream::Context::IOResult const &),base::internal::UnretainedWrapper<net::FileStream::Context>,base: [0x0C270FF1+49] (c:\src\chrome2\src\base\bind_internal.h:339) base::Callback<void __cdecl(net::FileStream::Context::IOResult const &),0,0>::Run [0x0C270D63+67] (c:\src\chrome2\src\base\callback.h:91) base::internal::ReplyAdapter<net::FileStream::Context::IOResult,net::FileStream::Context::IOResult const &> [0x0C26DD83+35] (c:\src\chrome2\src\base\post_task_and_reply_with_result_internal.h:28) base::internal::FunctorTraits<void (__cdecl*)(base::Callback<void __cdecl(net::FileStream::Context::IOResult const &),0,0>,net::FileStream::Context::IOResult *),void>::Invoke<base::Callback<void __cdecl(net::FileStream::Context::IOResult const &),0,0>,net [0x0C26D1F6+38] (c:\src\chrome2\src\base\bind_internal.h:164) base::internal::InvokeHelper<0,void>::MakeItSo<void (__cdecl*)(base::Callback<void __cdecl(net::FileStream::Context::IOResult const &),0,0>,net::FileStream::Context::IOResult *),base::Callback<void __cdecl(net::FileStream::Context::IOResult const &),0,0>, [0x0C26D771+49] (c:\src\chrome2\src\base\bind_internal.h:285) base::internal::Invoker<base::internal::BindState<void (__cdecl*)(base::Callback<void __cdecl(net::FileStream::Context::IOResult const &),0,0>,net::FileStream::Context::IOResult *),base::Callback<void __cdecl(net::FileStream::Context::IOResult const &),0, [0x0C26E37A+90] (c:\src\chrome2\src\base\bind_internal.h:361) base::internal::Invoker<base::internal::BindState<void (__cdecl*)(base::Callback<void __cdecl(net::FileStream::Context::IOResult const &),0,0>,net::FileStream::Context::IOResult *),base::Callback<void __cdecl(net::FileStream::Context::IOResult const &),0, [0x0C271126+54] (c:\src\chrome2\src\base\bind_internal.h:326) base::Callback<void __cdecl(void),0,0>::Run [0x065699E5+53] (c:\src\chrome2\src\base\callback.h:91) base::`anonymous namespace'::PostTaskAndReplyRelay::RunReplyAndSelfDestruct [0x06785F46+246] (c:\src\chrome2\src\base\threading\post_task_and_reply_impl.cc:63) base::internal::FunctorTraits<void (__thiscall base::`anonymous namespace'::PostTaskAndReplyRelay::*)(void),void>::Invoke<base::`anonymous namespace'::PostTaskAndReplyRelay *> [0x06785702+18] (c:\src\chrome2\src\base\bind_internal.h:215) base::internal::InvokeHelper<0,void>::MakeItSo<void (__thiscall base::`anonymous namespace'::PostTaskAndReplyRelay::*)(void),base::A0xdabd4356::PostTaskAndReplyRelay *> [0x06785764+36] (c:\src\chrome2\src\base\bind_internal.h:285) base::internal::Invoker<base::internal::BindState<void (__thiscall base::`anonymous namespace'::PostTaskAndReplyRelay::*)(void),base::internal::UnretainedWrapper<base::`anonymous namespace'::PostTaskAndReplyRelay> >,void __cdecl(void)>::RunImpl<void (__th [0x067857BB+59] (c:\src\chrome2\src\base\bind_internal.h:361) base::internal::Invoker<base::internal::BindState<void (__thiscall base::`anonymous namespace'::PostTaskAndReplyRelay::*)(void),base::internal::UnretainedWrapper<base::`anonymous namespace'::PostTaskAndReplyRelay> >,void __cdecl(void)>::RunOnce [0x06785E36+54] (c:\src\chrome2\src\base\bind_internal.h:326) base::Callback<void __cdecl(void),0,0>::Run [0x065699E5+53] (c:\src\chrome2\src\base\callback.h:91) base::debug::TaskAnnotator::RunTask [0x065D43FC+476] (c:\src\chrome2\src\base\debug\task_annotator.cc:61) base::MessageLoop::RunTask [0x0664F7DC+620] (c:\src\chrome2\src\base\message_loop\message_loop.cc:405) base::MessageLoop::DeferOrRunPendingTask [0x0664DCDB+43] (c:\src\chrome2\src\base\message_loop\message_loop.cc:418) base::MessageLoop::DoWork [0x0664E2DF+239] (c:\src\chrome2\src\base\message_loop\message_loop.cc:503) base::MessagePumpForIO::DoRunLoop [0x066560A1+33] (c:\src\chrome2\src\base\message_loop\message_pump_win.cc:475) base::MessagePumpWin::Run [0x0665718B+123] (c:\src\chrome2\src\base\message_loop\message_pump_win.cc:58) base::MessageLoop::RunHandler [0x0664F455+293] (c:\src\chrome2\src\base\message_loop\message_loop.cc:369) base::RunLoop::Run [0x0670D556+166] (c:\src\chrome2\src\base\run_loop.cc:106) base::RunLoop::RunUntilIdle [0x0670D63A+138] (c:\src\chrome2\src\base\run_loop.cc:116) content::TestBrowserThreadBundle::~TestBrowserThreadBundle [0x0239C245+581] (c:\src\chrome2\src\content\public\test\test_browser_thread_bundle.cc:63) content::TestBrowserThreadBundle::`scalar deleting destructor' [0x0091627F+15] std::default_delete<content::TestBrowserThreadBundle>::operator() [0x00915F45+37] (c:\src\depot_tools\win_toolchain\vs_files\d3cb0e37bdd120ad0ac4650b674b09e81be45616\vc\include\memory:1195) std::unique_ptr<content::TestBrowserThreadBundle,std::default_delete<content::TestBrowserThreadBundle> >::reset [0x00F0902A+58] (c:\src\depot_tools\win_toolchain\vs_files\d3cb0e37bdd120ad0ac4650b674b09e81be45616\vc\include\memory:1433) content::`anonymous namespace'::URLLoaderFactoryImplTest::~URLLoaderFactoryImplTest [0x00EFD102+194] (c:\src\chrome2\src\content\browser\loader\url_loader_factory_impl_unittest.cc:128) content::`anonymous namespace'::URLLoaderFactoryImplTest_DownloadToFileFailure_Test::~URLLoaderFactoryImplTest_DownloadToFileFailure_Test [0x00EFD1DF+15] content::`anonymous namespace'::URLLoaderFactoryImplTest_DownloadToFileFailure_Test::`scalar deleting destructor' [0x00EFE07F+15] testing::Test::DeleteSelf_ [0x01E17FE9+41] (c:\src\chrome2\src\third_party\googletest\src\googletest\include\gtest\gtest.h:453) testing::internal::HandleExceptionsInMethodIfSupported<testing::Test,void> [0x01E06194+52] (c:\src\chrome2\src\third_party\googletest\src\googletest\src\gtest.cc:2460) testing::TestInfo::Run [0x01E20528+216] (c:\src\chrome2\src\third_party\googletest\src\googletest\src\gtest.cc:2661) testing::TestCase::Run [0x01E2039F+191] (c:\src\chrome2\src\third_party\googletest\src\googletest\src\gtest.cc:2775) (No symbol) [0x01E20985] (c:\src\chrome2\src\third_party\googletest\src\googletest\src\gtest.cc:4651) It seems that the problem is that TestBrowserThreadBundle terminates the task scheduler (via scoped_async_task_scheduler_.reset()) while there's still some tasks to run. Commenting these 2 lines in TestBrowserThreadBundle::~TestBrowserThreadBundle fix the issue: base::RunLoop().RunUntilIdle(); CHECK(base::MessageLoop::current()->IsIdleForTesting());
,
May 18 2017
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/13c37ee0b4babbdec65c0ea3c68c9d771999689c commit 13c37ee0b4babbdec65c0ea3c68c9d771999689c Author: gab <gab@chromium.org> Date: Thu May 18 17:47:44 2017 Flush all TaskScheduler<->MainLoop tasks in ~TestBrowserThreadBundle() And update a bit of documentation on why some things are done a certain way. BUG= 724086 Review-Url: https://codereview.chromium.org/2893823003 Cr-Commit-Position: refs/heads/master@{#472864} [modify] https://crrev.com/13c37ee0b4babbdec65c0ea3c68c9d771999689c/base/test/scoped_task_environment.cc [modify] https://crrev.com/13c37ee0b4babbdec65c0ea3c68c9d771999689c/content/public/test/test_browser_thread_bundle.cc [modify] https://crrev.com/13c37ee0b4babbdec65c0ea3c68c9d771999689c/content/public/test/test_utils.h
,
May 18 2017
|
||
►
Sign in to add a comment |
||
Comment 1 by gab@chromium.org
, May 18 2017