Re: [CODE] [MEDIT]

From: George (greerga@circlemud.org)
Date: 01/21/99


On Thu, 21 Jan 1999, Will Andrews wrote:

>Cannot access memory at address 0x200a9080.
>#0  0x201175d1 in ?? ()
>(gdb) bt
>#0  0x201175d1 in ?? ()
>#1  0x20116e34 in ?? ()
>#2  0x48c3 in nonblock (s=26) at comm.c:1812

Strange, that's only called during socket setup.

>#3  0xefbfdfdc in ?? ()

Looks thoroughly mangled.

>#4  0x87e4f in update_ferry () at ferry.c:137
>#5  0x29e5 in heartbeat (pulse=33600) at comm.c:826
>#6  0x28cd in game_loop (mother_desc=3) at comm.c:715
>#7  0x1c04 in init_game (port=4000) at comm.c:274
>#8  0x1a50 in main (argc=3, argv=0xefbfdd54) at comm.c:244

Not Linux or I could tell where you were by pointer addresses.

>ferry.c:135-138:
>if(time_info.hours == ferrys[onferrynum].ferry_time_board_dock1) {
>  send_to_room(ferrys[onferrynum].board_dock_dock1,
>real_room(ferrys[onferrynum].dock1_room));
>  send_to_room(ferrys[onferrynum].board_ferry_dock1,
>real_room(ferrys[onferrynum].ferry_at_dock_room));
>}
[...]
>This is where I get stumped. How can send_to_room possibly cause an
>infinite loop?

Could be real_room() getting confused on a corrupted world array.  I'd add
a counter to real_room():

real_room()
{
  int counter=0;

  ... top of loop ...
  counter++;
  if (counter > 10000) {
    log(important_variables)
    abort();
  }
  ... bottom of loop ...
}

--
George Greer - greerga@circlemud.org - http://www.circlemud.org/~greerga/
I have three jobs covering 6 days of the week, 17 credit hours on two campuses
30 minutes apart, and am trying to have a semblance of a life.  Don't be
suprised if I take week or more to answer anything directly mailed to me.


     +------------------------------------------------------------+
     | Ensure that you have read the CircleMUD Mailing List FAQ:  |
     |  http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html  |
     +------------------------------------------------------------+



This archive was generated by hypermail 2b30 : 12/15/00 PST