View Issue Details

IDProjectCategoryView StatusLast Update
0004447DarkRadiantDesign/Codingpublic07.07.2017 18:51
Reportergreebo Assigned Togreebo  
PrioritynormalSeveritycrashReproducibilitysometimes
Status closedResolutionfixed 
Product Version2.1.0 
Target Version2.2.0Fixed in Version2.2.0 
Summary0004447: Crash due to concurrent XMLRegistry accesses from multiple threads
DescriptionSometimes during startup one thread tries to call findXPath() while the other one is invoking deleteXPath() in the XMLReigstry, resulting in a crash. The deletes are coming from the postModuleInitialisation thread (main thread) while other .def parser threads are still trying to construct ModResource classes which rely on a short registry read access.
Additional InformationWorker Thread:

xmlregistry.dll!xml::Document::findXPath(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & path) Line 137 C++
xmlregistry.dll!RegistryTree::findXPath(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & xPath) Line 41 C++
xmlregistry.dll!XMLRegistry::findXPath(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & path) Line 78 C++
DarkRadiant.exe!game::Game::getKeyValue(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & key) Line 80 C++
vfspk3.dll!game::current::getModPath(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & fullPath) Line 44 C++
vfspk3.dll!DirectoryArchiveTextFile::DirectoryArchiveTextFile(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & name, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & modDir, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & filename) Line 228 C++
vfspk3.dll!DirectoryArchive::openTextFile(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & name) Line 33 C++
vfspk3.dll!Doom3FileSystem::openTextFile(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & filename) Line 200 C++
particles.dll!particles::ParticlesManager::reloadParticleDefs::__l2::<lambda>(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & filename) Line 250 C++

Main Thread:
xmlregistry.dll!XMLRegistry::deleteXPath(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & path) Line 124 C++
eventmanager.dll!ui::EventManager::loadAccelerators() Line 363 C++
DarkRadiant.exe!radiant::RadiantModule::postModuleInitialisation() Line 264 C++
DarkRadiant.exe!sigc::bound_mem_functor0<void,radiant::RadiantModule>::operator()() Line 1787 C++
DarkRadiant.exe!sigc::adaptor_functor<sigc::bound_mem_functor0<void,radiant::RadiantModule> >::operator()() Line 251 C++
DarkRadiant.exe!sigc::internal::slot_call0<sigc::bound_mem_functor0<void,radiant::RadiantModule>,void>::call_it(sigc::internal::slot_rep * rep) Line 104 C++
DarkRadiant.exe!sigc::internal::signal_emit0<void,sigc::nil>::emit(sigc::internal::signal_impl * impl) Line 772 C++
DarkRadiant.exe!sigc::signal0<void,sigc::nil>::emit() Line 2667 C++
DarkRadiant.exe!module::ModuleRegistry::initialiseModules() Line 166 C++
DarkRadiant.exe!RadiantApp::onStartupEvent(wxCommandEvent & ev) Line 141 C++
TagsNo tags attached.

Activities

greebo

greebo

26.12.2016 07:30

administrator   ~0008632

Rudimentary locking implemented in 73dfcc13ce65706459be1622f3c58f7d09cfbb16

Issue History

Date Modified Username Field Change
25.12.2016 17:09 greebo New Issue
25.12.2016 17:09 greebo Status new => confirmed
26.12.2016 07:30 greebo Note Added: 0008632
26.12.2016 07:30 greebo Status confirmed => resolved
26.12.2016 07:30 greebo Fixed in Version => 2.2.0
26.12.2016 07:30 greebo Resolution open => fixed
26.12.2016 07:30 greebo Assigned To => greebo
07.07.2017 18:51 greebo Status resolved => closed