View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0004447 | DarkRadiant | Design/Coding | public | 25.12.2016 17:09 | 07.07.2017 18:51 |
Reporter | greebo | Assigned To | greebo | ||
Priority | normal | Severity | crash | Reproducibility | sometimes |
Status | closed | Resolution | fixed | ||
Product Version | 2.1.0 | ||||
Target Version | 2.2.0 | Fixed in Version | 2.2.0 | ||
Summary | 0004447: Crash due to concurrent XMLRegistry accesses from multiple threads | ||||
Description | Sometimes 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 Information | Worker 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++ | ||||
Tags | No tags attached. | ||||
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 |