Bugzilla – Bug 172
Potential deadlock(?) or as designed
Last modified: 2009-05-28 13:10:16
You need to log in before you can comment on or make changes to this bug.
Here is ThreadPool methods: void ThreadPool::wait(TaskId nTaskId) { boost::recursive_mutex::scoped_lock oLock (m_mxTasks); void ThreadPool::schedule(Handler const &pfHandler) { boost::recursive_mutex::scoped_lock oLock (m_mxTasks); Thread 1: wait (lock mutex and wait untill thread 2 finish to work) Thread 2: schedule (wait untill thread 1 unlock m_mxTasks mutex) Is it potential deadlock or as designed functionality?
Bug is not fixed: Here is call stacks: Thread1: NTDLL.DLL!77f88f13() [Frames below may be incorrect and/or missing, no symbols loaded for NTDLL.DLL] NTDLL.DLL!77f8f295() NTDLL.DLL!77f87f26() libCppUtilsd.dll!`anonymous namespace'::wait_critical_section_infinite(void * mutex=0x005b8a18) Line 99 C++ libCppUtilsd.dll!boost::recursive_mutex::do_lock() Line 58 + 0xb bytes C++ libCppUtilsd.dll!boost::detail::thread::lock_ops<boost::recursive_mutex>::lock(boost::recursive_mutex & m={...}) Line 34 C++ libCppUtilsd.dll!boost::detail::thread::scoped_lock<boost::recursive_mutex>::lock() Line 76 + 0xb bytes C++ libCppUtilsd.dll!boost::detail::thread::scoped_lock<boost::recursive_mutex>::scoped_lock<boost::recursive_mutex>(boost::recursive_mutex & mx={...}, bool initially_locked=true) Line 67 C++ > libCppUtilsd.dll!cpputils::ept::ThreadPool::wait(unsigned long nTaskId=2) Line 196 + 0x1d bytes C++ libShmemd.dll!anthill::shmem::ShmemAcceptor::releaseAcceptorTask() Line 109 + 0x15 bytes C++ libShmemd.dll!anthill::shmem::ShmemAcceptor::stop() Line 76 C++ UnitTestsd.exe!testShmemConnection::test_method() Line 77 + 0x26 bytes C++ UnitTestsd.exe!testShmemConnection_invoker() Line 32 + 0x277 bytes C++ UnitTestsd.exe!boost::unit_test::ut_detail::invoker<boost::unit_test::ut_detail::unused>::invoke<void (__cdecl*)(void)>(void (void)* & f=0x00461010) Line 56 + 0x2c bytes C++ UnitTestsd.exe!boost::unit_test::ut_detail::callback0_impl_t<boost::unit_test::ut_detail::unused,void (__cdecl*)(void)>::invoke() Line 89 + 0x41 bytes C++ UnitTestsd.exe!boost::unit_test::callback0<boost::unit_test::ut_detail::unused>::operator()() Line 118 + 0x25 bytes C++ UnitTestsd.exe!boost::unit_test::`anonymous namespace'::zero_return_wrapper_t<boost::unit_test::callback0<boost::unit_test::ut_detail::unused> >::operator()() Line 41 + 0x17 bytes C++ UnitTestsd.exe!boost::unit_test::ut_detail::invoker<int>::invoke<boost::unit_test::`anonymous namespace'::zero_return_wrapper_t<boost::unit_test::callback0<boost::unit_test::ut_detail::unused> > >(boost::unit_test::`anonymous-namespace'::zero_return_wrapper_t<boost::unit_test::callback0<boost::unit_test::ut_detail::unused> > & f={...}) Line 42 + 0xf bytes C++ UnitTestsd.exe!boost::unit_test::ut_detail::callback0_impl_t<int,boost::unit_test::`anonymous namespace'::zero_return_wrapper_t<boost::unit_test::callback0<boost::unit_test::ut_detail::unused> > >::invoke() Line 89 + 0x1d bytes C++ UnitTestsd.exe!boost::unit_test::callback0<int>::operator()() Line 118 + 0x21 bytes C++ UnitTestsd.exe!boost::execution_monitor::catch_signals(const boost::unit_test::callback0<int> & F={...}, bool __formal=true, bool __formal=true) Line 497 + 0x36 bytes C++ UnitTestsd.exe!boost::execution_monitor::execute(const boost::unit_test::callback0<int> & F={...}, bool catch_system_errors=true, int timeout=0) Line 225 + 0x17 bytes C++ UnitTestsd.exe!boost::unit_test::unit_test_monitor_t::execute_and_translate(const boost::unit_test::test_case & tc={...}) Line 65 + 0x4d bytes C++ UnitTestsd.exe!boost::unit_test::framework_impl::visit(const boost::unit_test::test_case & tc={...}) Line 135 + 0xf bytes C++ UnitTestsd.exe!boost::unit_test::traverse_test_tree(const boost::unit_test::test_case & tc={...}, boost::unit_test::test_tree_visitor & V={...}) Line 155 C++ UnitTestsd.exe!boost::unit_test::traverse_test_tree(unsigned long id=65540, boost::unit_test::test_tree_visitor & V={...}) Line 193 + 0x16 bytes C++ UnitTestsd.exe!boost::unit_test::traverse_test_tree(const boost::unit_test::test_suite & suite={...}, boost::unit_test::test_tree_visitor & V={...}) Line 168 + 0xd bytes C++ UnitTestsd.exe!boost::unit_test::traverse_test_tree(unsigned long id=1, boost::unit_test::test_tree_visitor & V={...}) Line 195 + 0x16 bytes C++ UnitTestsd.exe!boost::unit_test::framework::run(unsigned long id=1, bool continue_test=true) Line 396 + 0xf bytes C++ UnitTestsd.exe!boost::unit_test::unit_test_main(int argc=3, char * * argv=0x005b5c60) Line 61 + 0x9 bytes C++ UnitTestsd.exe!main(int argc=3, char * * argv=0x005b5c60) Line 99 + 0xd bytes C++ UnitTestsd.exe!__tmainCRTStartup() Line 586 + 0x19 bytes C UnitTestsd.exe!mainCRTStartup() Line 403 C KERNEL32.DLL!7c5989a5() Thread2: NTDLL.DLL!77f88f13() [Frames below may be incorrect and/or missing, no symbols loaded for NTDLL.DLL] NTDLL.DLL!77f8f295() NTDLL.DLL!77f87f26() libCppUtilsd.dll!`anonymous namespace'::wait_critical_section_infinite(void * mutex=0x005b8c08) Line 99 C++ libCppUtilsd.dll!boost::recursive_mutex::do_lock() Line 58 + 0xb bytes C++ libCppUtilsd.dll!boost::detail::thread::lock_ops<boost::recursive_mutex>::lock(boost::recursive_mutex & m={...}) Line 34 C++ libCppUtilsd.dll!boost::detail::thread::scoped_lock<boost::recursive_mutex>::lock() Line 76 + 0xb bytes C++ libCppUtilsd.dll!boost::detail::thread::scoped_lock<boost::recursive_mutex>::scoped_lock<boost::recursive_mutex>(boost::recursive_mutex & mx={...}, bool initially_locked=true) Line 67 C++ libCppUtilsd.dll!cpputils::ept::ThreadPool::schedule(unsigned long nTaskId=2, const boost::function0<void,std::allocator<boost::function_base> > & pfHandler={...}) Line 134 + 0x11 bytes C++ > libShmemd.dll!anthill::shmem::ShmemAcceptor::scheduleAccepting() Line 134 + 0x4f bytes C++ libShmemd.dll!anthill::shmem::ShmemAcceptor::acceptConnection() Line 146 + 0x8 bytes C++ libShmemd.dll!boost::_mfi::mf0<void,anthill::shmem::ShmemAcceptor>::operator()(anthill::shmem::ShmemAcceptor * p=0x005b8790) Line 49 + 0xc bytes C++ libShmemd.dll!boost::_bi::list1<boost::_bi::value<anthill::shmem::ShmemAcceptor *> >::operator()<boost::_mfi::mf0<void,anthill::shmem::ShmemAcceptor>,boost::_bi::list0>(boost::_bi::type<void> __formal={...}, boost::_mfi::mf0<void,anthill::shmem::ShmemAcceptor> & f={...}, boost::_bi::list0 & a={...}, boost::_bi::type<void> __formal={...}) Line 232 C++ libShmemd.dll!boost::_bi::bind_t<void,boost::_mfi::mf0<void,anthill::shmem::ShmemAcceptor>,boost::_bi::list1<boost::_bi::value<anthill::shmem::ShmemAcceptor *> > >::operator()() Line 21 C++ libShmemd.dll!boost::detail::function::void_function_obj_invoker0<boost::_bi::bind_t<void,boost::_mfi::mf0<void,anthill::shmem::ShmemAcceptor>,boost::_bi::list1<boost::_bi::value<anthill::shmem::ShmemAcceptor *> > >,void>::invoke(boost::detail::function::function_buffer & function_obj_ptr={...}) Line 156 C++ libCppUtilsd.dll!boost::function0<void,std::allocator<boost::function_base> >::operator()() Line 692 + 0x13 bytes C++ libCppUtilsd.dll!cpputils::ept::ThreadPool::TasksStorageItem::executeHandler() Line 138 + 0x2e bytes C++ libCppUtilsd.dll!cpputils::ept::ThreadPool::onRunTask(unsigned int m_nSystemTaskId=1) Line 248 C++ libCppUtilsd.dll!boost::_mfi::mf1<void,cpputils::ept::ThreadPool,unsigned int>::operator()(cpputils::ept::ThreadPool * p=0x005b8ad8, unsigned int a1=1) Line 162 + 0x10 bytes C++ libCppUtilsd.dll!boost::_bi::list2<boost::_bi::value<cpputils::ept::ThreadPool *>,boost::_bi::value<unsigned long> >::operator()<boost::_mfi::mf1<void,cpputils::ept::ThreadPool,unsigned int>,boost::_bi::list0>(boost::_bi::type<void> __formal={...}, boost::_mfi::mf1<void,cpputils::ept::ThreadPool,unsigned int> & f={...}, boost::_bi::list0 & a={...}, boost::_bi::type<void> __formal={...}) Line 289 C++ libCppUtilsd.dll!boost::_bi::bind_t<void,boost::_mfi::mf1<void,cpputils::ept::ThreadPool,unsigned int>,boost::_bi::list2<boost::_bi::value<cpputils::ept::ThreadPool *>,boost::_bi::value<unsigned long> > >::operator()() Line 21 C++ libCppUtilsd.dll!boost::detail::function::void_function_obj_invoker0<boost::_bi::bind_t<void,boost::_mfi::mf1<void,cpputils::ept::ThreadPool,unsigned int>,boost::_bi::list2<boost::_bi::value<cpputils::ept::ThreadPool *>,boost::_bi::value<unsigned long> > >,void>::invoke(boost::detail::function::function_buffer & function_obj_ptr={...}) Line 156 C++ libCppUtilsd.dll!boost::function0<void,std::allocator<boost::function_base> >::operator()() Line 692 + 0x13 bytes C++ libCppUtilsd.dll!thread_proxy(void * param=0x0012e500) Line 110 C++ msvcr80d.dll!_callthreadstartex() Line 348 + 0xf bytes C msvcr80d.dll!_threadstartex(void * ptd=0x005b91e8) Line 331 C KERNEL32.DLL!7c57b396() Thread3: NTDLL.DLL!77f88f13() [Frames below may be incorrect and/or missing, no symbols loaded for NTDLL.DLL] KERNEL32.DLL!7c59a072() KERNEL32.DLL!7c57b3e9() libCppUtilsd.dll!boost::detail::condition_impl::do_wait() Line 199 + 0xf bytes C++ > libCppUtilsd.dll!boost::condition::do_wait<boost::recursive_mutex>(boost::recursive_mutex & mutex={...}) Line 155 C++ libCppUtilsd.dll!boost::condition::wait<boost::detail::thread::scoped_lock<boost::recursive_mutex> >(boost::detail::thread::scoped_lock<boost::recursive_mutex> & lock={...}) Line 94 C++ libCppUtilsd.dll!cpputils::ept::ThreadPool::onRunTask(unsigned int m_nSystemTaskId=1) Line 232 C++ libCppUtilsd.dll!boost::_mfi::mf1<void,cpputils::ept::ThreadPool,unsigned int>::operator()(cpputils::ept::ThreadPool * p=0x005bc8a0, unsigned int a1=1) Line 162 + 0x10 bytes C++ libCppUtilsd.dll!boost::_bi::list2<boost::_bi::value<cpputils::ept::ThreadPool *>,boost::_bi::value<unsigned long> >::operator()<boost::_mfi::mf1<void,cpputils::ept::ThreadPool,unsigned int>,boost::_bi::list0>(boost::_bi::type<void> __formal={...}, boost::_mfi::mf1<void,cpputils::ept::ThreadPool,unsigned int> & f={...}, boost::_bi::list0 & a={...}, boost::_bi::type<void> __formal={...}) Line 289 C++ libCppUtilsd.dll!boost::_bi::bind_t<void,boost::_mfi::mf1<void,cpputils::ept::ThreadPool,unsigned int>,boost::_bi::list2<boost::_bi::value<cpputils::ept::ThreadPool *>,boost::_bi::value<unsigned long> > >::operator()() Line 21 C++ libCppUtilsd.dll!boost::detail::function::void_function_obj_invoker0<boost::_bi::bind_t<void,boost::_mfi::mf1<void,cpputils::ept::ThreadPool,unsigned int>,boost::_bi::list2<boost::_bi::value<cpputils::ept::ThreadPool *>,boost::_bi::value<unsigned long> > >,void>::invoke(boost::detail::function::function_buffer & function_obj_ptr={...}) Line 156 C++ libCppUtilsd.dll!boost::function0<void,std::allocator<boost::function_base> >::operator()() Line 692 + 0x13 bytes C++ libCppUtilsd.dll!thread_proxy(void * param=0x00b5df28) Line 110 C++ msvcr80d.dll!_callthreadstartex() Line 348 + 0xf bytes C msvcr80d.dll!_threadstartex(void * ptd=0x005bcf18) Line 331 C KERNEL32.DLL!7c57b396()
Invalid Pool usage.