supertuxkart-sourceforge-migration / stk-migration-test

0 stars 0 forks source link

STK hangs on reverse subsea #621

Closed supertuxkart-sourceforge-migration closed 10 years ago

supertuxkart-sourceforge-migration commented 10 years ago

Author: mbasaglia

The game hang when playing on the reversed subsea track with 19 AI karts. This happens on the second lap. Works no problem with the regular track.

Here is the console output

Irrlicht Engine version 1.8.0
Linux 3.2.0-38-generic #0trisquel1 SMP Wed Feb 27 19:09:07 UTC 2013 x86_64
[Data files will be fetched from: 'share/ supertuxkart-0.8-lin64'
[FileManager](FileManager]) Addons files will be stored in '/home/bazzy/.local/share/supertuxkart/addons'.
[IrrDriver] Trying OpenGL rendering.
unknown sector found.
WARNING: UNKNOWN_SECTOR in spatialToTrack().
unknown sector found.
WARNING: UNKNOWN_SECTOR in spatialToTrack().
unknown sector found.
WARNING: UNKNOWN_SECTOR in spatialToTrack().

The "unknown sector found." part comes out at the time of the hang.

supertuxkart-sourceforge-migration commented 10 years ago

Author: mbasaglia I have attached a screenshot of what is displayed when the hang occurs.

supertuxkart-sourceforge-migration commented 10 years ago

Author: deveee Can you reproduce it? If yes, log from debugger could help.

You should have debug version of STK: http://supertuxkart.sourceforge.net/Build_STK_on_Linux It's a little outdated. Now you don't need to compile irrlicht your own. It compiles automatically by cmake.

Then, in console:

cd /path/to/STK gdb bin/supertuxkart

and after crash:

bt full

supertuxkart-sourceforge-migration commented 10 years ago

Author: mbasaglia I was able to reproduce it on svn trunk.

Here is the output of '''bt full'''

#0  0x00007ffff5fbe425 in __GI_raise (sig=<optimized out>)
    at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
        resultvar = 0
        pid = <optimized out>
        selftid = 4580
#1  0x00007ffff5fc1b8b in __GI_abort () at abort.c:91
        save_stage = 2
        act = {__sigaction_handler = {sa_handler = 0xe92c70, 
            sa_sigaction = 0xe92c70}, sa_mask = {__val = {140737321646624, 0, 
              0, 140737488345344, 140737320541778, 15281264, 206158430232, 
              140737488345360, 140737488345136, 7302446, 206158430256, 
              283974976, 140737323992864, 140737321651776, 1, 
              140737488348200}}, sa_flags = -166716907, sa_restorer = 0xe92c20}
        sigs = {__val = {32, 0 <repeats 15 times>}}
#2  0x00007ffff5fb70ee in __assert_fail_base (fmt=<optimized out>, 
    assertion=0xe92c70 "!(sizeof (new_trans.getOrigin().getX()) == sizeof (float) ? __isnanf (new_trans.getOrigin().getX()) : sizeof (new_trans.getOrigin().getX()) == sizeof (double) ? __isnan (new_trans.getOrigin().getX()) "..., 
    file=0xe92c20 "src/physics/kart_motion_state.hpp", line=<optimized out>, function=<optimized out>) at assert.c:94
        str = 0x10ed1d40 "\220,\355\020"
        total = 4096
#3  0x00007ffff5fb7192 in __GI___assert_fail (
    assertion=0xe92c70 "!(sizeof (new_trans.getOrigin().getX()) == sizeof (float) ? __isnanf (new_trans.getOrigin().getX()) : sizeof (new_trans.getOrigin().getX()) == sizeof (double) ? __isnan (new_trans.getOrigin().getX()) "..., 
    file=0xe92c20 "src/physics/kart_motion_state.hpp", line=69, 
    function=0xe94420 "virtual void KartMotionState::setWorldTransform(const btTransform&)") at assert.c:103
No locals.
#4  0x000000000086bd88 in KartMotionState::setWorldTransform (this=0x10470980, 
    new_trans=...)
    at src/physics/kart_motion_state.hpp:69
        __PRETTY_FUNCTION__ = "virtual void KartMotionState::setWorldTransform(const btTransform&)"
---Type <return> to continue, or q <return> to quit---
#5  0x00000000008132c3 in Moveable::setXYZ (this=0x1097b4a0, a=...)
    at src/karts/moveable.hpp:91
No locals.
#6  0x0000000000828fbf in RubberBall::updateAndDelete (this=0x1097b4a0, 
    dt=0.0270000007)
    at src/items/rubber_ball.cpp:389
        next_xyz = {<btVector3> = {m_floats = {-nan(0x400000), 6.30661821, 
              -nan(0x400000), 0}}, <No data fields>}
        close_to_ground = false
        vertical_offset = 2
        height = 4.11006451
        new_y = 6.30661821
#7  0x0000000000824658 in ProjectileManager::updateServer (this=0x22e9ed0, 
    dt=0.0270000007)
    at src/items/projectile_manager.cpp:112
        can_be_deleted = false
        p = {_M_current = 0x1037e480}
#8  0x00000000008244b8 in ProjectileManager::update (this=0x22e9ed0, 
    dt=0.0270000007)
    at src/items/projectile_manager.cpp:75
        he = {_M_current = 0x0}
#9  0x0000000000892e5e in World::update (this=0x1fb0f70, dt=0.0270000007)
    at src/modes/world.cpp:822
        __PRETTY_FUNCTION__ = "virtual void World::update(float)"
        kart_amount = 20
#10 0x00000000008804f9 in LinearWorld::update (this=0x1fb0f70, dt=0.0270000007)
    at src/modes/linear_world.cpp:152
        kart_amount = 32767
        pos_used = {<std::_Vector_base<int, std::allocator<int> >> = {
            _M_impl = {<std::allocator<int>> = {<__gnu_cxx::new_allocator<int>> = {<No data fields>}, <No data fields>}, _M_start = 0x1346da0, 
              _M_finish = 0x13465b0, 
              _M_end_of_storage = 0x70760c}}, <No data fields>}
#11 0x000000000089283d in World::updateWorld (this=0x1fb0f70, dt=0.0270000007)
    at src/modes/world.cpp:703
---Type <return> to continue, or q <return> to quit---
        __PRETTY_FUNCTION__ = "void World::updateWorld(float)"
#12 0x0000000000876ce6 in MainLoop::updateRace (this=0x194a0d0, 
    dt=0.0270000007)
    at src/main_loop.cpp:112
No locals.
#13 0x0000000000876de1 in MainLoop::run (this=0x194a0d0)
    at src/main_loop.cpp:137
        dt = 0.0270000007
        device = 0x1348850
#14 0x0000000000874d92 in main (argc=1, argv=0x7fffffffe118)
    at src/main.cpp:1494
        materials_file = {static npos = <optimized out>, 
          _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, 
            _M_p = 0x7f6ddb8 "../data/models/materials.xml"}}
        important_message = {array = 0x92fb400 L"", allocated = 1, used = 1, 
          allocator = {_vptr.irrAllocator = 0xe10bd0}}

Before the game failed, gdb gave out this output:

src/physics/kart_motion_state.hpp:69: 
virtual void KartMotionState::setWorldTransform(const btTransform&): 
Assertion `!(sizeof (new_trans.getOrigin().getX()) == sizeof (float) ? __isnanf (new_trans.getOrigin().getX()) : 
sizeof (new_trans.getOrigin().getX()) == sizeof (double) ? __isnan (new_trans.getOrigin().getX()) :
 __isnanl (new_trans.getOrigin().getX()))' failed.
supertuxkart-sourceforge-migration commented 10 years ago

Author: nixt I tried to replicate the issue running in debug mode but nothing crashed. Subsea, reverse with 19 opponents and 2 laps.

supertuxkart-sourceforge-migration commented 10 years ago

Author: deveee I was able to reproduce it in debug mode and I got the same log.

I don't think that it depends on this track or reverse mode. Looks like a kart is hit by rubber ball while it has some specific position or something other. Probably more opponents - crash is more often.

On screenshot also you can see crash while the kart is hit.

supertuxkart-sourceforge-migration commented 10 years ago

Author: mbasaglia From the screenshot it looks as if every kart is being hit at once. It may be an effect of the NaN values of the rubberball position.

It's just my guess but it may have to do with track forks. I get this bug very consistently within the first alternative driveline (the one that goes inside the dragon) starting from the second lap. The reason that this bug appears often on reversed subsea may be that there are boxes very close to the start of the alternative driveline.

supertuxkart-sourceforge-migration commented 10 years ago

Author: auria There are indeed NaNs, more precisely :

    at src/items/rubber_ball.cpp:389
        next_xyz = {<btVector3> = {m_floats = {-nan(0x400000), 6.30661821, 
              -nan(0x400000), 0}}, <No data fields>}
supertuxkart-sourceforge-migration commented 10 years ago

Author: auria Asserts added in r12831 to try to catch this bug

supertuxkart-sourceforge-migration commented 10 years ago

Author: magned Postponed till 0.8.2.

supertuxkart-sourceforge-migration commented 10 years ago

Author: deveee Fixed in r13647.

Probably this is bug in the track. Sometimes distance from getNextControlPoint() has value equal to 0. And then in interpolate() we have m_t_increase = m_speed/m_length_cp_1_2 which is infinity in this case.