Jump to content

polonawa

Members
  • Posts

    32
  • Joined

  • Last visited

    Never
  • Donations

    0.00 GBP 

Posts posted by polonawa

  1. ASSERT in a C built-in function , taking a boolean expression as paramater, if the parameter is false (here, the empty() function returns a boolean) the ASSERT makes the program properly crash. It's used to debug a program, and prevent memory corrupt.

  2. I had the same crash on my custom core, and i found that it was due to an assertion fail , enven if the backtrace didn't mentionned it.

    Polymorphism makes the core call Object::BuildUpdateData() instead of WorldObject::BuildUpdateData() in several cases I've not identified yet.

    To prevent thoses crashes an hacky way, you can comment the assert in Object.cpp (around line 1130)

    void Object::BuildUpdateData( UpdateDataMapType& /*update_players */)
    {
       sLog.outError("Unexpected call of Object::BuildUpdateData for object (TypeId: %u Update fields: %u)",GetTypeId(), m_valuesCount);
       //ASSERT(false);
    }
    

  3. Yes, I understand the check but I just think that the server decision is a bit strict in this case, that's all. killing the process is a bit strong isn't it ? Thats why I was asking if it could be better to replace the assert by something else, like a player kick or a player teleport...

    Thanks for all those explanations and sry for my bad english :)

  4. Hi ,

    I just noticed a special crash appearing just after another one if one group is in raid during the first crash.

    I got this backtrace

    #4  0x084fe6c9 in InstanceMap::Add (this=0x969736f0, player=0xa321a188) at ../../../src/game/Map.cpp:2437
    #5  0x08777c5c in WorldSession::HandlePlayerLogin (this=0x96b900e0, holder=0xa36f60b8) at ../../../src/game/CharacterHandler.cpp:704
    #6  0x0877bc40 in CharacterHandler::HandlePlayerLoginCallback (this=0x8920d54, holder=0xa36f60b8) at ../../../src/game/CharacterHandler.cpp:133
    #7  0x0877afbe in MaNGOS::_Callback<CharacterHandler, QueryResult*, SqlQueryHolder*, void, void>::_Execute (this=0x98d1d154)
       at ../../../src/game/../framework/Utilities/Callback.h:92
    #8  0x0877afd8 in MaNGOS::_IQueryCallback<MaNGOS::_Callback<CharacterHandler, QueryResult*, SqlQueryHolder*, void, void> >::Execute (this=0x98d1d150)
       at ../../../src/game/../framework/Utilities/Callback.h:405
    #9  0x087a0165 in SqlResultQueue::Update (this=0xcc4de90) at ../../../../src/shared/Database/SqlOperations.cpp:77
    #10 0x086ebdcd in World::UpdateResultQueue (this=0xb6a229e8) at ../../../src/game/World.cpp:1965
    #11 0x086f3436 in World::Update (this=0xb6a229e8, diff=26) at ../../../src/game/World.cpp:1464
    #12 0x0839b64f in WorldRunnable::run (this=0xb2c8faf0) at ../../../src/mangosd/WorldRunnable.cpp:60
    

    I found the related piece of code in Map.cpp

    bool InstanceMap::CanEnter(Player *player)
    {
       if(player->GetMapRef().getTarget() == this)
       {
           sLog.outError("InstanceMap::CanEnter - player %s(%u) already in map %d,%d,%d!", player->GetName(), player->GetGUIDLow(), GetId(), GetInstanceId(), GetSpawnMode());
           ASSERT(false);
           return false;
       }
    
    ...
    

    Why is there an assert here ? Isnt'it possible to replace it by a player teleport to his homebind ?

    Maybe am I totally blind , but I don't understand this Assert, really.

    Thanks for reading.

  5. Script for realmd

    file : restarter_realmd.sh
    
    #!/bin/bash
    
    if (ps -C mangos-realmd )
       then echo "status : OK"
    else
           echo "status : DOWN" 
           cd PATH_TO_YOUR_MANGOS/bin
    
    
           screen -d -m -S session_name PATH_TO_YOUR_MANGOS/bin/mangos-realmd
    fi
    

    in your crontab you should use absolute paths, ti avoid errors.

    Depending on the user's crontab the "./" fodler could be his home directory , or /root ...

    Is restarter for mangos working ?

  6. You can create a restarter with a few lines of bash

    file : restarter.sh
    
    #!/bin/bash
    
    if (ps -C mangos-worldd )
       then echo "status : OK"
    else
           echo "status : DOWN" 
           cd PATH_TO_YOUR_MANGOS/bin
    
           tar -czvf logs.tar.gz Server.log DBErrors.log Char.log
    
           #enable crashdumps
           ulimit -c unlimited
    
           screen -d -m -S session_name PATH_TO_YOUR_MANGOS/bin/mangos-worldd
    fi
    

    and execute this script using cron

    crontab -e

    */1 * * * * cd /home/youruser/scripts/restarter;./restarter.sh
    

    Cron checks the process every minute, and restart it, if it crashed.

    This script is for the world process, you can easily adapt it for realmd

  7. Hi,

    as usual, donno if I'm the only one encountering this crash, but I got a few with very similar backtraces.

    Especially in map 615 (Obsidian Sanctum), already read a topic explaining how to reproduce the crash with Sartharion's script, but mine is different, don't think it's related to the script ...

    #0  Map::UnloadGrid (this=0x8e429bb0, x=@0xb2aff1e8, y=@0xb2aff1e4, 
       pForce=true) at ../../../src/game/../framework/GameSystem/NGrid.h:39
    39        void setUnloadReferenceLock( bool on ) { i_unloadReferenceLock = on; }
    (gdb) bt
    #0  Map::UnloadGrid (this=0x8e429bb0, x=@0xb2aff1e8, y=@0xb2aff1e4, 
       pForce=true) at ../../../src/game/../framework/GameSystem/NGrid.h:39
    #1  0x082325bf in Map::UnloadAll (this=0x8e429bb0, pForce=true)
       at ../../../src/game/Map.cpp:1095
    #2  0x08232d0b in ~Map (this=0x8e429bb0) at ../../../src/game/Map.cpp:62
    #3  0x082330f9 in ~InstanceMap (this=0x8e429bb0)
       at ../../../src/game/Map.cpp:2371
    #4  0x08418a4e in MapInstanced::DestroyInstance (this=0x9c03a6a0, 
       itr=@0xb2aff294) at ../../../src/game/MapInstanced.cpp:242
    #5  0x084196b3 in MapInstanced::Update (this=0x9c03a6a0, t=@0xb2aff2c8)
       at ../../../src/game/MapInstanced.cpp:58
    #6  0x0824b01d in MapManager::Update (this=0xb48bf2f0, diff=47)
       at ../../../src/game/MapManager.cpp:265
    #7  0x083bef7a in World::Update (this=0xb6a22950, diff=47)
       at ../../../src/game/World.cpp:1411
    #8  0x08127448 in WorldRunnable::run (this=0xb47135c8)
       at ../../../src/mangosd/WorldRunnable.cpp:60
    #9  0x0846059a in ACE_Based::Thread::ThreadTask (param=0xb47135c8)
       at ../../../src/shared/Threading.cpp:187
    #10 0xb7e9d18e in ACE_OS_Thread_Adapter::invoke (this=0xb47135f8)
       at ../../../../dep/ACE_wrappers/ace/OS_Thread_Adapter.cpp:90
    #11 0xb7e46f01 in ace_thread_adapter (args=0xb47135f8)
       at ../../../../dep/ACE_wrappers/ace/Base_Thread_Adapter.cpp:124
    

    Information about the map concerned :

    (gdb) select 1
    (gdb) print *this->i_mapEntry
    $1 = {MapID = 615, map_type = 2, name = {0xb4e5d2d0 "", 0xb4e5d2d0 "", 
       0xb4e5ea6e "Le sanctum Obsidien", 0xb4e5d2d0 "" <repeats 13 times>}, 
     linked_zone = 0, multimap_id = 239, entrance_map = 571, 
     entrance_x = 3438.15332, entrance_y = 260.401306, addon = 2}
    (gdb) 
    
    

    Someone with something like me ?

    Thanks a lot for reading :)

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. Privacy Policy Terms of Use