[quake3] Problems in botlib/be_aas_route.c ?

Chad Gatesman cgatesman at gmail.com
Fri Nov 4 12:15:04 EST 2005


You didn't step over "intdist = (int) dist;" yet. intdist is uninitialized,
and that is why the values are different on the two systems.

-Chad


On 11/4/05, vincent at cojot.name <vincent at cojot.name> wrote:
>
>
> I'm trying to find the source of the botlib segfaults on Solaris/Sparc.
>
> I'm running the dedicated server with:
>
> gdb> ....3ded
> gdb> b AAS_AreaTravelTime
> gdb> r +set vm_game 1 +set vm_cgame 1 +set vm_ui 1 +set sv_pure 1 +set
> ttycon 0 +map q3dm17
>
> On Linux/i386/RHEL3, I get this run:
>
> ------------ Map Loading ------------
> trying to load maps/q3dm17.aas
> loaded maps/q3dm17.aas
> found 29 level items
> -------------------------------------
> 32 bots parsed
> 35 arenas parsed
>
> Breakpoint 1, AAS_AreaTravelTime (areanum=4, start=0xbfff8bc0,
> end=0xb622b69c)
> at ../botlib/be_aas_route.c:480
> 480 VectorSubtract(start, end, dir);
> (gdb) n
> 481 dist = VectorLength(dir);
> (gdb) n
> 483 if (AAS_AreaCrouch(areanum)) dist *=
> DISTANCEFACTOR_CROUCH;
> (gdb) n
> 485 else if (AAS_AreaSwim(areanum)) dist *=
> DISTANCEFACTOR_SWIM;
> (gdb) n
> 487 else dist *= DISTANCEFACTOR_WALK;
> (gdb) n
> 489 intdist = (int) dist;
> (gdb) print dir
> $6 = {0, 5.1000061, 0.125}
> (gdb) print dist
> $7 = 1.68350756
> (gdb) print intdist
> $8 = 0
>
> On Solaris/Sparc, I get this run:
> ------------ Map Loading ------------
> trying to load maps/q3dm17.aas
> loaded maps/q3dm17.aas
> found 29 level items
> -------------------------------------
> 32 bots parsed
> 35 arenas parsed
>
> Breakpoint 1, AAS_AreaTravelTime (areanum=4, start=0xffbf9d28,
> end=0x496b1bc) at ../botlib/be_aas_route.c:480
> 480 VectorSubtract(start, end, dir);
> (gdb) n
> 481 dist = VectorLength(dir);
> (gdb) n
> 483 if (AAS_AreaCrouch(areanum)) dist *=
> DISTANCEFACTOR_CROUCH;
> (gdb) n
> 485 else if (AAS_AreaSwim(areanum)) dist *=
> DISTANCEFACTOR_SWIM;
> (gdb) n
> 487 else dist *= DISTANCEFACTOR_WALK;
> (gdb) n
> 489 intdist = (int) dist;
> (gdb) print dir
> $5 = {0, 5.1000061, 0.125}
> (gdb) print dist
> $6 = 1.68350756
> (gdb) print intdist
> $7 = 4543008
>
> I cannot understand why intdist would be so different in both cases.. I
> cannot understand either why it isn't being cast as 'unsigned short' since
> that's what AAS_AreaTravelTime should return..
>
> Eventually, this results in segfaults on Solaris/Sparc..
>
> Program received signal SIGSEGV, Segmentation fault.
> 0x000a4a24 in AAS_CalculateAreaTravelTimes () at
> ../botlib/be_aas_route.c:543
> 543 aasworld.areatraveltimes[i][l] = (unsigned short *) ptr;
>
> I can override that segfault by using playing with LittleShort but then it
> dies on line 522 on be_aas_route.c...
>
> *Sigh*
>
> Vincent
>



--
Chad Gatesman
Software Engineer
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://icculus.org/pipermail/quake3/attachments/20051104/946e9a47/attachment.htm>


More information about the quake3 mailing list