I am experiencing a crash in log4cxx 0.10.0 when my application exits, and my initial investigation made me hope that your patch for LOGCXX-322 would sort it out.
I re-tested with log4cxx Trunk (svn checkout http://svn.apache.org/repos/asf/incubator/log4cxx/trunk apache-log4cxx) but the problem still exists. Have you any idea what may be causing it? (My log4cxx dll is named log4cxx_adtyco_tpl.dll.) -- I have tried statically linking to log4cxx but in that instance the DLL that uses log4cxx suffers the same fate. -- I have tried with and without APR_HAS_THREADS - no obvious change to the stack trace. -- log4cxx has been used in my application for years without any problems. Is there anything I may have introduced in my own code or DLL structure that might have triggered this? -- The weird .NET stuff you see at the beginning of the stack trace is a .NET Runtime Callable Wrapper being disposed as a result of my use of COM to integrate my native code with a .NET application. This is some .NET garbage collecting, auto-dispose magic that I cannot really control, I don't think. Again, this .NET auto-disposal stuff has been part of my application for years. Thanks for any help. -- Sean Dynan Senior Principal Software Engineer / Tyco Security Products >msvcr120.dll!abort() Line 88C log4cxx_adtyco_tpl.dll!log4cxx::helpers::ObjectPtrT<log4cxx::Logger>::~ObjectPtrT<log4cxx::Logger>() Line 102 log4cxx_adtyco_tpl.dll!log4cxx::helpers::ObjectPtrT<log4cxx::Logger>::`vector deleting destructor'() log4cxx_adtyco_tpl.dll!std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::pattern::PatternConverter> >::destroy<log4cxx::helpers::ObjectPtrT<log4cxx::pattern::PatternConverter> >(_Ptr=0x08f4df48) Line 608 log4cxx_adtyco_tpl.dll!std::allocator_traits<std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::spi::HierarchyEventListener> > >::destroy<log4cxx::helpers::ObjectPtrT<log4cxx::spi::HierarchyEventListener> >(_Al={...}, _Ptr=0x08f4df48) Line 731 log4cxx_adtyco_tpl.dll!std::_Wrap_alloc<std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::helpers::ObjectOutputStream> > >::destroy<log4cxx::helpers::ObjectPtrT<log4cxx::helpers::ObjectOutputStream> >(_Ptr=0x08f4df48) Line 879 log4cxx_adtyco_tpl.dll!std::_Destroy_range<std::_Wrap_alloc<std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::helpers::ObjectOutputStream> > > >(_First=0x08f4df48, _Last=0x08f4df50, _Al={...}, __formal={...}) Line 82 log4cxx_adtyco_tpl.dll!std::_Destroy_range<std::_Wrap_alloc<std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::helpers::InetAddress> > > >(_First=0x08f4df48, _Last=0x08f4df50, _Al={...}) Line 96 log4cxx_adtyco_tpl.dll!std::vector<log4cxx::helpers::ObjectPtrT<log4cxx::helpers::Socket>,std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::helpers::Socket> > >::_Destroy(_First=0x08f4df48, _Last=0x08f4df50) Line 1567 log4cxx_adtyco_tpl.dll!std::vector<log4cxx::helpers::ObjectPtrT<log4cxx::helpers::Socket>,std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::helpers::Socket> > >::_Tidy() Line 1628 log4cxx_adtyco_tpl.dll!std::vector<log4cxx::helpers::ObjectPtrT<log4cxx::helpers::Socket>,std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::helpers::Socket> > >::~vector<log4cxx::helpers::ObjectPtrT<log4cxx::helpers::Socket>,std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::helpers::Socket> > >() Line 946 log4cxx_adtyco_tpl.dll!std::pair<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > const > ,std::vector<log4cxx::helpers::ObjectPtrT<log4cxx::Logger>,std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::Logger> > > >::~pair<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > const > ,std::vector<log4cxx::helpers::ObjectPtrT<log4cxx::Logger>,std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::Logger> > > >() log4cxx_adtyco_tpl.dll!std::pair<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > const > ,std::vector<log4cxx::helpers::ObjectPtrT<log4cxx::Logger>,std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::Logger> > > >::`scalar deleting destructor'() log4cxx_adtyco_tpl.dll!std::allocator<std::_Tree_node<std::pair<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > const > ,std::vector<log4cxx::helpers::ObjectPtrT<log4cxx::Logger>,std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::Logger> > > >,void *> > > >>::destroy<std::pair<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > const > ,std::vector<log4cxx::helpers::ObjectPtrT<log4cxx::Logger>,std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::Logger> > > > >(_Ptr=0x1921d550) Line 608 log4cxx_adtyco_tpl.dll!std::allocator_traits<std::allocator<std::_Tree_node<std::pair<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > const > ,std::vector<log4cxx::helpers::ObjectPtrT<log4cxx::Logger>,std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::Logger> > > >,void *> > >::destroy<std::pair<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > const > ,std::vector<log4cxx::helpers::ObjectPtrT<log4cxx::Logger>,std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::Logger> > > > >(_Al={...}, _Ptr=0x1921d550) Line 731 log4cxx_adtyco_tpl.dll!std::_Wrap_alloc<std::allocator<std::_Tree_node<std::pair<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > const > ,std::vector<log4cxx::helpers::ObjectPtrT<log4cxx::Logger>,std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::Logger> > > >,void *> > >::destroy<std::pair<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > const > ,std::vector<log4cxx::helpers::ObjectPtrT<log4cxx::Logger>,std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::Logger> > > > >(_Ptr=0x1921d550) Line 879 log4cxx_adtyco_tpl.dll!std::_Tree<std::_Tmap_traits<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >,std::vector<log4cxx::helpers::ObjectPtrT<log4cxx::Logger>,std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::Logger> > >,std::less<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > >,std::allocator<std::pair<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > const > ,std::vector<log4cxx::helpers::ObjectPtrT<log4cxx::Logger>,std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::Logger> > > > >,0> >::_Erase(_Rootnode=0x1921d540) Line 2083 log4cxx_adtyco_tpl.dll!std::_Tree<std::_Tmap_traits<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >,std::vector<log4cxx::helpers::ObjectPtrT<log4cxx::Logger>,std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::Logger> > >,std::less<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > >,std::allocator<std::pair<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > const > ,std::vector<log4cxx::helpers::ObjectPtrT<log4cxx::Logger>,std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::Logger> > > > >,0> >::_Erase(_Rootnode=0x1921da80) Line 2079 log4cxx_adtyco_tpl.dll!std::_Tree<std::_Tmap_traits<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >,std::vector<log4cxx::helpers::ObjectPtrT<log4cxx::Logger>,std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::Logger> > >,std::less<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > >,std::allocator<std::pair<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > const > ,std::vector<log4cxx::helpers::ObjectPtrT<log4cxx::Logger>,std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::Logger> > > > >,0> >::clear() Line 1541 log4cxx_adtyco_tpl.dll!std::_Tree<std::_Tmap_traits<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >,std::vector<log4cxx::helpers::ObjectPtrT<log4cxx::Logger>,std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::Logger> > >,std::less<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > >,std::allocator<std::pair<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > const > ,std::vector<log4cxx::helpers::ObjectPtrT<log4cxx::Logger>,std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::Logger> > > > >,0> >::erase(_First={...}, _Last={...}) Line 1515 log4cxx_adtyco_tpl.dll!std::_Tree<std::_Tmap_traits<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >,std::vector<log4cxx::helpers::ObjectPtrT<log4cxx::Logger>,std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::Logger> > >,std::less<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > >,std::allocator<std::pair<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > const > ,std::vector<log4cxx::helpers::ObjectPtrT<log4cxx::Logger>,std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::Logger> > > > >,0> >::_Tidy() Line 2231 log4cxx_adtyco_tpl.dll!std::_Tree<std::_Tmap_traits<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >,std::vector<log4cxx::helpers::ObjectPtrT<log4cxx::Logger>,std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::Logger> > >,std::less<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > >,std::allocator<std::pair<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > const > ,std::vector<log4cxx::helpers::ObjectPtrT<log4cxx::Logger>,std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::Logger> > > > >,0> > > > >>::~_Tree<std::_Tmap_traits<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >,std::vector<log4cxx::helpers::ObjectPtrT<log4cxx::Logger>,std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::Logger> > >,std::less<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > >,std::allocator<std::pair<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > const > ,std::vector<log4cxx::helpers::ObjectPtrT<log4cxx::Logger>,std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::Logger> > > > >,0> >() Line 1193 log4cxx_adtyco_tpl.dll!std::map<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >,std::vector<log4cxx::helpers::ObjectPtrT<log4cxx::Logger>,std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::Logger> > >,std::less<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > >,std::allocator<std::pair<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > const > ,std::vector<log4cxx::helpers::ObjectPtrT<log4cxx::Logger>,std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::Logger> > > > > >::~map<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >,std::vector<log4cxx::helpers::ObjectPtrT<log4cxx::Logger>,std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::Logger> > >,std::less<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > >,std::allocator<std::pair<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > const > ,std::vector<log4cxx::helpers::ObjectPtrT<log4cxx::Logger>,std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::Logger> > > > > >() log4cxx_adtyco_tpl.dll!std::map<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >,std::vector<log4cxx::helpers::ObjectPtrT<log4cxx::Logger>,std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::Logger> > >,std::less<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > >,std::allocator<std::pair<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > const > ,std::vector<log4cxx::helpers::ObjectPtrT<log4cxx::Logger>,std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::Logger> > > > > >::`scalar deleting destructor'() log4cxx_adtyco_tpl.dll!log4cxx::Hierarchy::~Hierarchy() Line 71 log4cxx_adtyco_tpl.dll!log4cxx::Hierarchy::`vbase destructor'() log4cxx_adtyco_tpl.dll!log4cxx::Hierarchy::`vector deleting destructor'() log4cxx_adtyco_tpl.dll!log4cxx::helpers::ObjectImpl::releaseRef() Line 46 log4cxx_adtyco_tpl.dll!log4cxx::Hierarchy::releaseRef() Line 80 log4cxx_adtyco_tpl.dll!log4cxx::helpers::ObjectPtrT<log4cxx::spi::LoggerRepository>::~ObjectPtrT<log4cxx::spi::LoggerRepository>() Line 102 log4cxx_adtyco_tpl.dll!log4cxx::spi::DefaultRepositorySelector::~DefaultRepositorySelector() log4cxx_adtyco_tpl.dll!log4cxx::spi::DefaultRepositorySelector::`vbase destructor'() log4cxx_adtyco_tpl.dll!log4cxx::spi::DefaultRepositorySelector::`vector deleting destructor'() log4cxx_adtyco_tpl.dll!log4cxx::helpers::ObjectImpl::releaseRef() Line 46 log4cxx_adtyco_tpl.dll!log4cxx::spi::DefaultRepositorySelector::releaseRef() Line 36 log4cxx_adtyco_tpl.dll!log4cxx::helpers::ObjectPtrT<log4cxx::spi::RepositorySelector>::~ObjectPtrT<log4cxx::spi::RepositorySelector>() Line 102 log4cxx_adtyco_tpl.dll!`log4cxx::LogManager::getRepositorySelector'::`2'::`dynamic atexit destructor for 'selector''() log4cxx_adtyco_tpl.dll!_CRT_INIT(hDllHandle, dwReason, lpreserved) Line 416C log4cxx_adtyco_tpl.dll!__DllMainCRTStartup(hDllHandle=0x0c4d0000, dwReason=0, lpreserved=0x00000001) Line 522C log4cxx_adtyco_tpl.dll!_DllMainCRTStartup(hDllHandle=0x0c4d0000, dwReason=0, lpreserved=0x00000001) Line 472C ntdll.dll!_LdrxCallInitRoutine@16 ()Unknown ntdll.dll!LdrpCallInitRoutine()Unknown ntdll.dll!LdrShutdownProcess()Unknown ntdll.dll!RtlExitUserProcess()Unknown AcLayers.dll!NS_FaultTolerantHeap::FthExitUserProcess ()Unknown AcLayers.dll!NS_FaultTolerantHeap::APIHook_RtlExitUserProcess ()Unknown kernel32.dll!_ExitProcessImplementation@4 ()Unknown mscoreei.dll!RuntimeDesc::ShutdownAllActiveRuntimes ()Unknown mscoreei.dll!CLRRuntimeHostInternalImpl::ShutdownAllRuntimesThenExit ()Unknown clr.dll!EEPolicy::ExitProcessViaShim ()Unknown clr.dll!SafeExitProcess ()Unknown clr.dll!HandleExitProcessHelper()Unknown clr.dll!EEPolicy::HandleExitProcess ()Unknown clr.dll!__CorExeMainInternal@0 ()Unknown clr.dll!__CorExeMain@0 ()Unknown mscoreei.dll!__CorExeMain@0 ()Unknown mscoree.dll!__CorExeMain_Exported@0 ()Unknown kernel32.dll!@BaseThreadInitThunk@12 ()Unknown ntdll.dll!__RtlUserThreadStart()Unknown ntdll.dll!__RtlUserThreadStart@8 ()Unknown