Launcher crashes on exit when cell name loading thread is still running
Call stack:
Click to expand
> [Inline Frame] openmw-launcher.exe!std::_Hash<std::_Uset_traits<std::string,std::_Uhash_compare<std::string,Misc::StringUtils::CiHash,Misc::StringUtils::CiEqual>,std::allocator<std::string>,0>>::_Find_last(const std::basic_string_view<char,std::char_traits<char>> &) Line 1541 C++
[Inline Frame] openmw-launcher.exe!std::_Hash<std::_Uset_traits<std::string,std::_Uhash_compare<std::string,Misc::StringUtils::CiHash,Misc::StringUtils::CiEqual>,std::allocator<std::string>,0>>::_Find(const std::basic_string_view<char,std::char_traits<char>> &) Line 1218 C++
openmw-launcher.exe!std::_Hash<std::_Uset_traits<std::string,std::_Uhash_compare<std::string,Misc::StringUtils::CiHash,Misc::StringUtils::CiEqual>,std::allocator<std::string>,0>>::find<std::basic_string_view<char,std::char_traits<char>>>(const std::basic_string_view<char,std::char_traits<char>> & _Keyval={...}) Line 1230 C++
openmw-launcher.exe!ESM::`anonymous namespace'::getOrInsertString(std::basic_string_view<char,std::char_traits<char>> id={...}) Line 34 C++
openmw-launcher.exe!ESM::StringRefId::StringRefId(std::basic_string_view<char,std::char_traits<char>> value) Line 60 C++
openmw-launcher.exe!ESM::RefId::stringRefId(std::basic_string_view<char,std::char_traits<char>> value) Line 148 C++
openmw-launcher.exe!ESM::Cell::generateIdForCell(bool exterior, std::basic_string_view<char,std::char_traits<char>> cellName, int x, int y=0x3f800000) Line 90 C++
openmw-launcher.exe!ESM::Cell::updateId() Line 76 C++
openmw-launcher.exe!ESM::Cell::loadNameAndData(ESM::ESMReader & esm={...}, bool & isDeleted=false) Line 126 C++
openmw-launcher.exe!CellNameLoader::getCellName(ESM::ESMReader & esmReader={...}) Line 74 C++
openmw-launcher.exe!CellNameLoader::getCellNames(const QList<QString> & contentPaths={...}) Line 43 C++
openmw-launcher.exe!Launcher::DataFilesPage::reloadCells(QList<QString> selectedFiles={...}) Line 1014 C++
[Inline Frame] openmw-launcher.exe!std::invoke(void(Launcher::DataFilesPage::*)(QList<QString>) &&) Line 1712 C++
openmw-launcher.exe!std::thread::_Invoke<std::tuple<void (__cdecl Launcher::DataFilesPage::*)(QList<QString>),Launcher::DataFilesPage *,QList<QString>>,0,1,2>(void * _RawVals=0x00000194a64541c0) Line 61 C++
ucrtbase.dll!thread_start<unsigned int (__cdecl*)(void *),1>() Unknown
kernel32.dll!BaseThreadInitThunk() Unknown
ntdll.dll!RtlUserThreadStart() Unknown
A bad pointer is accessed and it looks like we've torn down something that the thread's still using. We should have some way of aborting the thread before destroying the rest of the launcher.