-
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)
-
None
-
None
-
None
-
None
-
None
-
None
-
None
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