As part of https://codereview.chromium.org/1814223002/ we are trying to shutdown cleanly rather than exit. By shutdown cleanly I mean quit the message loop and have main return. Unfortunately doing that leads to a DCHECK in node_controller with one test. The test is ConnectTest.ConnectToClientProcess_Blocked.
The specific problematic case is connect_test_driver.cc. If the exit is removed, the following DCHECK is hit:
Backtrace:
base::debug::StackTrace::StackTrace [0x0000000180080D46+54] (d:\src\builds\build2\src\base\debug\stack_trace_win.cc:215)
logging::LogMessage::~LogMessage [0x00000001800FC929+89] (d:\src\builds\build2\src\base\logging.cc:520)
logging::Win32ErrorLogMessage::~Win32ErrorLogMessage [0x00000001800FCECE+174] (d:\src\builds\build2\src\base\logging.cc:840)
base::MessagePumpForIO::RegisterIOHandler [0x0000000180148C1A+346] (d:\src\builds\build2\src\base\message_loop\message_pump_win.cc:454)
base::MessageLoopForIO::RegisterIOHandler [0x0000000180138163+83] (d:\src\builds\build2\src\base\message_loop\message_loop.cc:729)
mojo::edk::`anonymous namespace'::ChannelWin::StartOnIOThread [0x0000000000BA8C08+184] (d:\src\builds\build2\src\mojo\edk\system\channel_win.cc:153)
base::internal::RunnableAdapter<void (__cdecl mojo::edk::`anonymous namespace'::ChannelWin::*)(void) __ptr64>::Run<> [0x0000000000BA52D1+65] (d:\src\bui
lds\build2\src\base\bind_internal.h:182)
base::internal::InvokeHelper<0,void,base::internal::RunnableAdapter<void (__cdecl mojo::edk::`anonymous namespace'::ChannelWin::*)(void) __ptr64> >::Mak
eItSo<mojo::edk::`anonymous namespace'::ChannelWin * __ptr64> [0x0000000000BA513A+58] (d:\src\builds\build2\src\base\bind_internal.h:302)
base::internal::Invoker<base::IndexSequence<0>,base::internal::BindState<base::internal::RunnableAdapter<void (__cdecl mojo::edk::`anonymous namespace':
:ChannelWin::*)(void) __ptr64>,void __cdecl(mojo::edk::`anonymous namespace'::ChannelWin * __ptr64),moj [0x0000000000BA86DE+110] (d:\src\builds\build2\src\base\
bind_internal.h:355)
base::Callback<void __cdecl(void),1>::Run [0x000000018003DC5D+61] (d:\src\builds\build2\src\base\callback.h:398)
base::debug::TaskAnnotator::RunTask [0x000000018008EFC5+549] (d:\src\builds\build2\src\base\debug\task_annotator.cc:53)
base::MessageLoop::RunTask [0x0000000180139608+968] (d:\src\builds\build2\src\base\message_loop\message_loop.cc:477)
base::MessageLoop::DeferOrRunPendingTask [0x0000000180136561+81] (d:\src\builds\build2\src\base\message_loop\message_loop.cc:488)
base::MessageLoop::DoWork [0x0000000180136EC4+340] (d:\src\builds\build2\src\base\message_loop\message_loop.cc:597)
base::MessagePumpForIO::DoRunLoop [0x0000000180146DAC+60] (d:\src\builds\build2\src\base\message_loop\message_pump_win.cc:485)
base::MessagePumpWin::Run [0x00000001801493CE+142] (d:\src\builds\build2\src\base\message_loop\message_pump_win.cc:52)
base::MessageLoop::RunHandler [0x00000001801391D3+291] (d:\src\builds\build2\src\base\message_loop\message_loop.cc:441)
base::RunLoop::Run [0x0000000180241F6B+91] (d:\src\builds\build2\src\base\run_loop.cc:36)
base::MessageLoop::Run [0x0000000180139035+293] (d:\src\builds\build2\src\base\message_loop\message_loop.cc:294)
base::Thread::Run [0x000000018030C0ED+45] (d:\src\builds\build2\src\base\threading\thread.cc:203)
base::Thread::ThreadMain [0x000000018030D26D+1085] (d:\src\builds\build2\src\base\threading\thread.cc:257)
base::`anonymous namespace'::ThreadFunc [0x00000001802DFE45+341] (d:\src\builds\build2\src\base\threading\platform_thread_win.cc:86)
BaseThreadInitThunk [0x0000000077A259ED+13]
RtlUserThreadStart [0x0000000077B5B371+33]
If I comment out the DCHECK I hit this:
[FATAL:message_pump_win.cc(453)] Check failed: port. : The handle is invalid. (0x6)
Backtrace:
base::debug::StackTrace::StackTrace [0x0000000180080D46+54] (d:\src\builds\build2\src\base\debug\stack_trace_win.cc:215)
logging::LogMessage::~LogMessage [0x00000001800FC929+89] (d:\src\builds\build2\src\base\logging.cc:520)
logging::Win32ErrorLogMessage::~Win32ErrorLogMessage [0x00000001800FCECE+174] (d:\src\builds\build2\src\base\logging.cc:840)
base::MessagePumpForIO::RegisterIOHandler [0x0000000180148C1A+346] (d:\src\builds\build2\src\base\message_loop\message_pump_win.cc:454)
base::MessageLoopForIO::RegisterIOHandler [0x0000000180138163+83] (d:\src\builds\build2\src\base\message_loop\message_loop.cc:729)
mojo::edk::`anonymous namespace'::ChannelWin::StartOnIOThread [0x0000000000B68C08+184] (d:\src\builds\build2\src\mojo\edk\system\channel_win.cc:153)
base::internal::RunnableAdapter<void (__cdecl mojo::edk::`anonymous namespace'::ChannelWin::*)(void) __ptr64>::Run<> [0x0000000000B652D1+65] (d:\src\bui
lds\build2\src\base\bind_internal.h:182)
base::internal::InvokeHelper<0,void,base::internal::RunnableAdapter<void (__cdecl mojo::edk::`anonymous namespace'::ChannelWin::*)(void) __ptr64> >::Mak
eItSo<mojo::edk::`anonymous namespace'::ChannelWin * __ptr64> [0x0000000000B6513A+58] (d:\src\builds\build2\src\base\bind_internal.h:302)
base::internal::Invoker<base::IndexSequence<0>,base::internal::BindState<base::internal::RunnableAdapter<void (__cdecl mojo::edk::`anonymous namespace':
:ChannelWin::*)(void) __ptr64>,void __cdecl(mojo::edk::`anonymous namespace'::ChannelWin * __ptr64),moj [0x0000000000B686DE+110] (d:\src\builds\build2\src\base\
bind_internal.h:355)
base::Callback<void __cdecl(void),1>::Run [0x000000018003DC5D+61] (d:\src\builds\build2\src\base\callback.h:398)
base::debug::TaskAnnotator::RunTask [0x000000018008EFC5+549] (d:\src\builds\build2\src\base\debug\task_annotator.cc:53)
base::MessageLoop::RunTask [0x0000000180139608+968] (d:\src\builds\build2\src\base\message_loop\message_loop.cc:477)
base::MessageLoop::DeferOrRunPendingTask [0x0000000180136561+81] (d:\src\builds\build2\src\base\message_loop\message_loop.cc:488)
base::MessageLoop::DoWork [0x0000000180136EC4+340] (d:\src\builds\build2\src\base\message_loop\message_loop.cc:597)
base::MessagePumpForIO::DoRunLoop [0x0000000180146DAC+60] (d:\src\builds\build2\src\base\message_loop\message_pump_win.cc:485)
base::MessagePumpWin::Run [0x00000001801493CE+142] (d:\src\builds\build2\src\base\message_loop\message_pump_win.cc:52)
base::MessageLoop::RunHandler [0x00000001801391D3+291] (d:\src\builds\build2\src\base\message_loop\message_loop.cc:441)
base::RunLoop::Run [0x0000000180241F6B+91] (d:\src\builds\build2\src\base\run_loop.cc:36)
base::MessageLoop::Run [0x0000000180139035+293] (d:\src\builds\build2\src\base\message_loop\message_loop.cc:294)
base::Thread::Run [0x000000018030C0ED+45] (d:\src\builds\build2\src\base\threading\thread.cc:203)
base::Thread::ThreadMain [0x000000018030D26D+1085] (d:\src\builds\build2\src\base\threading\thread.cc:257)
base::`anonymous namespace'::ThreadFunc [0x00000001802DFE45+341] (d:\src\builds\build2\src\base\threading\platform_thread_win.cc:86)
BaseThreadInitThunk [0x0000000077A259ED+13]
RtlUserThreadStart [0x0000000077B5B371+33]
For the time being I'm going to make the test continue to forcefully exit.
Comment 1 by roc...@chromium.org
, May 25 2017