-
Type: Bug
-
Resolution: Done
-
Priority: Major - P3
-
Affects Version/s: 3.3.10
-
Component/s: Replication
-
None
-
Fully Compatible
-
ALL
-
Platforms 18 (08/05/16)
Due to changes in FTDC, if time until the listener is started increases too much, master/slave replication will deadlock. The replication thread owns the database lock and waits for the listener to start. The main thread waits on the database thread before trying to start the listener.
I have only seen this on Windows 2008R2+ Debug builds.
Main Thread
0:000> kc # Call Site 00 ntdll!ZwWaitForKeyedEvent 01 ntdll!RtlSleepConditionVariableSRW 02 kernel32!SleepConditionVariableSRW 03 mongod!__crtSleepConditionVariableSRW 04 mongod!Concurrency::details::stl_condition_variable_win7::wait_for 05 mongod!do_wait 06 mongod!_Cnd_timedwait 07 mongod!std::_Cnd_timedwaitX 08 mongod!std::condition_variable::wait_until 09 mongod!std::condition_variable::wait_for 0a mongod!mongo::CondVarLockGrantNotification::wait 0b mongod!mongo::LockerImpl<1>::lockComplete 0c mongod!mongo::LockerImpl<1>::lockGlobalComplete 0d mongod!mongo::Lock::GlobalLock::waitForLock 0e mongod!mongo::Lock::GlobalLock::GlobalLock 0f mongod!mongo::Lock::GlobalWrite::{ctor} 10 mongod!mongo::logStartup 11 mongod!mongo::_initAndListen 12 mongod!mongo::initAndListen 13 mongod!mongoDbMain 14 mongod!wmain 15 mongod!invoke_main 16 mongod!__scrt_common_main_seh 17 mongod!__scrt_common_main 18 mongod!wmainCRTStartup 19 kernel32!BaseThreadInitThunk 1a ntdll!RtlUserThreadStart
Replication Thread
10 Id: 143c.9d8 Suspend: 0 Teb: 000007ff`fffa6000 Unfrozen # Call Site 00 ntdll!ZwWaitForKeyedEvent 01 ntdll!RtlSleepConditionVariableSRW 02 kernel32!SleepConditionVariableSRW 03 mongod!__crtSleepConditionVariableSRW 04 mongod!Concurrency::details::stl_condition_variable_win7::wait_for 05 mongod!Concurrency::details::stl_condition_variable_win7::wait 06 mongod!do_wait 07 mongod!_Cnd_wait 08 mongod!std::_Cnd_waitX 09 mongod!std::condition_variable::wait 0a mongod!mongo::Listener::waitUntilListening 0b mongod!mongo::repl::isSelf 0c mongod!mongo::Cloner::copyDb 0d mongod!mongo::repl::ReplSource::resync 0e mongod!mongo::repl::ReplSource::_sync_pullOpLog_applyOperation 0f mongod!mongo::repl::ReplSource::_sync_pullOpLog 10 mongod!mongo::repl::ReplSource::sync 11 mongod!mongo::repl::_replMain 12 mongod!mongo::repl::replMain 13 mongod!mongo::repl::replSlaveThread 14 mongod!std::_Invoker_functor::_Call 15 mongod!std::invoke 16 mongod!std::_LaunchPad<std::unique_ptr<std::tuple<void (__cdecl*)(void)>,std::default_delete<std::tuple<void (__cdecl*)(void)> > > >::_Execute 17 mongod!std::_LaunchPad<std::unique_ptr<std::tuple<void (__cdecl*)(void)>,std::default_delete<std::tuple<void (__cdecl*)(void)> > > >::_Run 18 mongod!std::_Pad::_Call_func 19 mongod!invoke_thread_procedure 1a mongod!thread_start<unsigned int (__cdecl*)(void * __ptr64)> 1b kernel32!BaseThreadInitThunk 1c ntdll!RtlUserThreadStart