Closed supertuxkart-sourceforge-migration closed 10 years ago
Author: mbasaglia I have attached a screenshot of what is displayed when the hang occurs.
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
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.
Author: nixt I tried to replicate the issue running in debug mode but nothing crashed. Subsea, reverse with 19 opponents and 2 laps.
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.
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.
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>}
Author: auria Asserts added in r12831 to try to catch this bug
Author: magned Postponed till 0.8.2.
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.
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
The "unknown sector found." part comes out at the time of the hang.