azerothcore / azerothcore-wotlk

Complete Open Source and Modular solution for MMO
http://www.azerothcore.org
GNU Affero General Public License v3.0
6.63k stars 2.65k forks source link

[Major] Server Crash crashdump included #1078

Closed Razfury closed 5 years ago

Razfury commented 6 years ago
SMALL DESCRIPTION:

Server crashes, something with instances

EXPECTED BLIZZLIKE BEHAVIOUR:

I'm not sure I just have crashdump could be related to #723

CURRENT BEHAVIOUR:
STEPS TO REPRODUCE THE PROBLEM:
  1. Go to nexus instance
  2. wait for reset or manually reset
  3. crash
BRANCH(ES):

master

AC HASH/COMMIT:
OPERATING SYSTEM:

win 7

MODULES:

no

OTHER CUSTOMIZATIONS:

no other custom

crashdump.zip

I've included the .exe also, this was compiled in debug mode

ELdoBA commented 6 years ago

Tryed, i can't reproduce issue :thinking:

Rochet2 commented 6 years ago

@Razfury to be able to use a dmp file we would need more information. A dmp does not contain much on it's own. See https://docs.microsoft.com/en-us/visualstudio/debugger/using-dump-files?view=vs-2017#BKMK_Find_binaries__symbol___pdb__files__and_source_files

Razfury commented 6 years ago

@Rochet2 Ah sorry! here you go has the dmp, exe and pdb included, and crashlog

https://pastebin.com/VMzYHrea - crashlog

https://ufile.io/0fvjz I assume you have the dlls needed? the core has them in openssl

Rochet2 commented 6 years ago

You have not provided the source code or a commit hash so its hard to use the dmp still. The pastebin seems useless to me. Not sure why its so empty. Its missing data, such as the core hash. The pastebin link also contains the string "SunwellCore", which doesnt seem to exist on azerothcore as seen here where all results are either comments or readme:

$ grep -R --exclude-dir=.git "SunwellCore" .
./data/doc/_Sidebar.md:* [[Original SC Description|Original-SunwellCore-Description]]
./README.md:It is written in C++ and based on MaNGOS, TrinityCore and SunwellCore.
./README.md:- The SunwellCore developers **xinef** and **pussywizard**
./src/server/authserver/resource.h:// Used by SunwellCore.rc
./src/server/worldserver/resource.h:// Used by SunwellCore.rc

For now I did get this callstack extracted from the dmp exe and pdb:

    worldserver.exe!std::list<unsigned int,std::allocator<unsigned int> >::begin() Line 1119    C++
>   worldserver.exe!InstanceSaveManager::UnbindAllFor(InstanceSave * save=0x35f588a0) Line 773  C++
    worldserver.exe!Group::ResetInstances(unsigned char method='\x1', bool isRaid=false, Player * leader=0x9e9df1d8) Line 1991  C++
    worldserver.exe!WorldSession::HandleSetDungeonDifficultyOpcode(WorldPacket & recv_data={...}) Line 1411 C++
    worldserver.exe!WorldSession::Update(unsigned int diff=15, PacketFilter & updater={...}) Line 290   C++
    worldserver.exe!World::UpdateSessions(unsigned int diff=15) Line 2529   C++
    worldserver.exe!World::Update(unsigned int diff=15) Line 1930   C++
    worldserver.exe!WorldRunnable::run() Line 59    C++
    worldserver.exe!ACE_Based::Thread::ThreadTask(void * param=0x5802a430) Line 186 C++

It seems to suggest that for some reason in InstanceSaveManager::UnbindAllFor the InstanceSave* save save->m_playerList.begin() will crash. For some reason the list is reported to have invalid size pList | { size=3722304989 } | std::list<unsigned int,std::allocator<unsigned int> > &, which is probably why the access violation happens. The save itself seems to be invalid.

Interestingly the function that calls the unbind passes saves to the unbind from toUnbind vector, which has two elements (one invalid and one valid pointer), however m_boundInstances from which the pointers come from only has one element. However I cannot see what would delete the instance or otherwise cause an invalid instance to be added in this code and the core should be running only single thread at this time (maps are threaded, session update is not).

Razfury commented 6 years ago

Just had this happen again same everything it is related to what you said above.