New issue
Advanced search Search tips

Issue 724086 link

Starred by 1 user

Issue metadata

Status: Fixed
Owner:
Closed: May 2017
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: ----
Pri: 3
Type: Bug

Blocking:
issue 689520



Sign in to add a comment

TestBrowserThreadBundle terminates the scheduler while there's still some work to do on it.

Project Member Reported by sebmarchand@chromium.org, May 18 2017

Issue description

I'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());

 

Comment 1 by gab@chromium.org, May 18 2017

Status: Started (was: Untriaged)
Project Member

Comment 2 by bugdroid1@chromium.org, 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

Comment 3 by gab@chromium.org, May 18 2017

Status: Fixed (was: Started)

Sign in to add a comment