jackpoz / BotFarm

Application used to spawn WoW automated players compatible with 3.3.5a version only.
GNU General Public License v2.0
84 stars 67 forks source link

Crash #36

Closed jackpoz closed 8 years ago

jackpoz commented 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.
jackpoz commented 8 years ago

It seems having a

static IVMapManager* vmapManager;

is not thread-safe, in particular VMapManager2::iLoadedModelFile member

jackpoz commented 8 years ago

WorldModel* VMapManager2::acquireModelInstance() is missing a lock that TC has

jackpoz commented 8 years ago

https://github.com/jackpoz/TrinityCore/commit/495cbc7f2d23369e57b90023f933a090bc2bece1