Details
-
Bug
-
Status: Closed
-
Major - P3
-
Resolution: Fixed
-
3.3.10
-
None
-
Fully Compatible
-
ALL
-
Platforms 18 (08/05/16)
Description
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
|