8
« on: August 27, 2009, 12:29:49 am »
I reproduced the crash while running the game in GDB. I'm using ubuntu 9.04 with 2.6.28-15-generic kernel, on an intel 64 bit dual core.
Here's the stack trace:
(gdb) bt
#0 0x000000000053855f in INVSH_EmptyContainer (i=0x2da0e08, container=0x6281144) at src/game/inv_shared.c:1060
#1 0x000000000044d41a in LE_Cleanup () at src/client/cl_le.c:1128
#2 0x000000000043594a in GAME_Drop () at src/client/cl_game.c:464
#3 0x000000000044e1ca in CL_Drop () at src/client/cl_main.c:178
#4 0x0000000000508b32 in Com_Error (code=1, fmt=0x574b28 "Actor (entnum: %i) on team %i is still moving (%i steps left)") at src/common/common.c:240
#5 0x000000000045cfd2 in CL_ActorDoMove (self=0x574038, msg=0x13284908) at src/client/events/event/actor/e_event_actormove.c:79
#6 0x000000000045b23b in CL_ExecuteBattlescapeEvent (now=1415126, data=0x20b64348) at src/client/events/e_parse.c:112
#7 0x000000000050a7a5 in Qcommon_Frame () at src/common/common.c:1127
#8 0x0000000000563801 in main (argc=1, argv=0x7fffc2b9ff28) at src/ports/linux/linux_main.c:53
the whole event struct, I broke each field into a line (C-sytax style):
(gdb) p *le
$7 = {
inuse = qtrue,
invis = qfalse,
selected = qfalse,
type = 2,
entnum = 2,
origin = {-624, 848, 36},
oldOrigin = {0, 0, 0},
pos = "l\232",
oldPos = "l\232",
newPos = "l\231",
dir = 5,
TU = 0,
maxTU = 32,
morale = 0,
maxMorale = 100,
HP = 0,
maxHP = 100,
STUN = 0,
state = 0,
oldstate = 0,
angles = {0, 225, 0},
alpha = 0,
team = 7,
pnum = 9,
currentSelectedFiremode = 0,
actorMode = M_MOVE,
mousePendPos = "\000\000",
actorMoveLength = 0 '\0',
clientAction = 0,
contents = 8388608,
mins = {-9, -9, -24},
maxs = {9, 9, 20},
inlineModelName = "\000\000\000\000\000\000\000",
modelnum1 = 16,
modelnum2 = 17,
skinnum = 1,
model1 = 0xfcfc440,
model2 = 0xfcfc6b8,
think = 0x44bb22 <LET_StartPathMove>,
thinkDelay = 0,
path = "\030 ",
'\0' <repeats 29 times>,
pathContents = {0 <repeats 32 times>},
positionContents = 0,
pathLength = 1,
pathPos = 0,
startTime = 1414627,
endTime = 1414627,
speed = {321, 321, 0 <repeats 30 times>},
rotationSpeed = 0,
sample = 0x0,
volume = 0,
as = {
frame = 190,
oldframe = 189,
backlerp = 0.662999988,
time = 1000,
dt = 337,
mesh = 0,
list = "\032#\032\033\032#\032",
lcur = 6 '\006',
ladd = 7 '\a',
change = 0 '\0'},
particleID = 0x0,
levelflags = 0,
ptl = 0x0,
ref1 = 0x0,
ref2 = 0x0,
i = {c = {0x0 <repeats 16 times>}},
left = 109,
right = 109,
extension = 0,
headgear = 0,
fieldSize = 1,
teamDef = 0x62951f0,
gender = 0,
fd = 0x0,
pathMap = 0x0,
lighting = {
origin = {-624, 848, 36},
point = {-624, 848, 4.03125},
normal = {0, 0, 1},
color = {1, 1, 1},
position = {0, 0, 0},
time = 1403.11206,
colors = {{1, 1, 1}, {1, 1, 1}},
positions = {{0, 0, 0}, {0, 0, 0}}, dirty = qfalse},
addFunc = 0x42ccaf <CL_AddActor>
}
the arguments to the move function:
(gdb) p *self
$11 = {type = 15, name = 0x573c26 "EV_ACTOR_MOVE", formatString = 0x573c34 "!sbbs", eventCallback = 0x45cee7 <CL_ActorDoMove>, timeCallback = 0x45ced0 <CL_ActorDoMoveTime>}
(gdb) p *msg
$12 = {len = 15, space = 3985, head = 0x29130628, tail = 0x29130628, start = 0x29130632 "\002j\230", end = 0x29130641 "", next_free = 0x0}
Reminder, function pointers are printed both as 0xXXXXX address and as the name of the function in that address (if known at runtime). Strings are printed by address and by content (when the C-source type is char*).
Hope it helps. Cheers for a nice game.