Closed jackpoz closed 8 years ago
> cli.dll!std::_String_val<std::_Simple_types<char> >::_Myptr() Line 512 C++ cli.dll!std::_String_alloc<std::_String_base_types<char,std::allocator<char> > >::_Myptr() Line 567 C++ cli.dll!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::compare(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & _Right) Line 2118 C++ cli.dll!std::operator==<char,std::char_traits<char>,std::allocator<char> >(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & _Left, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & _Right) Line 2455 C++ cli.dll!std::equal_to<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >::operator()(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & _Left, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & _Right) Line 226 C++ cli.dll!std::_Uhash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::hash<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::equal_to<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::operator()(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & _Keyval1, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & _Keyval2) Line 119 C++ cli.dll!std::_Hash<std::_Umap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,VMAP::ManagedModel,std::_Uhash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::hash<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::equal_to<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,VMAP::ManagedModel> >,0> >::_Insert<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,VMAP::ManagedModel> & __ptr64,std::_List_unchecked_iterator<std::_List_val<std::_List_simple_types<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,VMAP::ManagedModel> > > > >(std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,VMAP::ManagedModel> & _Val, std::_List_unchecked_iterator<std::_List_val<std::_List_simple_types<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,VMAP::ManagedModel> > > > _Pnode) Line 724 C++ cli.dll!std::_Hash<std::_Umap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,VMAP::ManagedModel,std::_Uhash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::hash<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::equal_to<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,VMAP::ManagedModel> >,0> >::_Reinsert() Line 897 C++ cli.dll!std::_Hash<std::_Umap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,VMAP::ManagedModel,std::_Uhash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::hash<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::equal_to<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,VMAP::ManagedModel> >,0> >::_Check_size() Line 887 C++ cli.dll!std::_Hash<std::_Umap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,VMAP::ManagedModel,std::_Uhash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::hash<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::equal_to<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,VMAP::ManagedModel> >,0> >::_Insert<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,VMAP::ManagedModel> & __ptr64,std::_List_unchecked_iterator<std::_List_val<std::_List_simple_types<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,VMAP::ManagedModel> > > > >(std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,VMAP::ManagedModel> & _Val, std::_List_unchecked_iterator<std::_List_val<std::_List_simple_types<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,VMAP::ManagedModel> > > > _Pnode) Line 755 C++ cli.dll!std::_Hash<std::_Umap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,VMAP::ManagedModel,std::_Uhash_compare<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::hash<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::equal_to<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,VMAP::ManagedModel> >,0> >::emplace<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,VMAP::ManagedModel> >(std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,VMAP::ManagedModel> && <_Val_0>) Line 256 C++ cli.dll!std::unordered_map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,VMAP::ManagedModel,std::hash<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::equal_to<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,VMAP::ManagedModel> > >::insert<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,VMAP::ManagedModel>,void>(std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,VMAP::ManagedModel> && _Val) Line 254 C++ cli.dll!VMAP::VMapManager2::acquireModelInstance(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & basepath, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & filename) Line 295 C++ cli.dll!VMAP::StaticMapTree::LoadMapTile(unsigned int tileX, unsigned int tileY, VMAP::VMapManager2 * vm) Line 378 C++ cli.dll!VMAP::VMapManager2::_loadMap(unsigned int mapId, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & basePath, unsigned int tileX, unsigned int tileY) Line 134 C++ cli.dll!VMAP::VMapManager2::loadMap(const char * basePath, unsigned int mapId, int x, int y) Line 90 C++ [Managed to Native Transition] cli.dll!VMapCLI.VMap.LoadTile(int tileX, int tileY, int mapID) Line 17 C++ cli.dll!MapCLI.Map.GetTile(int tileX, int tileY, int mapID) Line 32 C++ cli.dll!MapCLI.Map.GetXYZFromAreaId(uint areaId, int mapID, float* x, float* y, float* z) Line 81 C++ cli.dll!DBCStoresCLI.DBCStores.GetAchievementExploreLocations(float x, float y, float z, int mapID) Line 109 C++ BotFarm.exe!BotFarm.BotGame.Start.AnonymousMethod__1() Line 171 C# Client.dll!Client.AutomatedGame.Update() Line 210 C# Client.dll!Client.AutomatedGame.Start.AnonymousMethod__92_0() Line 183 C#
Exception thrown: read access violation. this was 0xFFFFFFFFFFFFFFDF.
It seems having a
static IVMapManager* vmapManager;
is not thread-safe, in particular VMapManager2::iLoadedModelFile member
WorldModel* VMapManager2::acquireModelInstance() is missing a lock that TC has
https://github.com/jackpoz/TrinityCore/commit/495cbc7f2d23369e57b90023f933a090bc2bece1