Crash on destroy

Posted by Zeno on Fri 12 Nov 2004 04:37 PM — 3 posts, 13,416 views.

USA #0
There was a crash when I destroyed an Immortal.
#0  0x08074513 in close_area (pArea=0x91a28b0) at act_wiz.c:5850
#1  0x08075cc6 in do_destroy (ch=0x923fd58, argument=0xfef1cde8 "tyke")
    at act_wiz.c:6125
#2  0x080ce941 in interpret (ch=0x923fd58, argument=0xfef1cde8 "tyke")
    at interp.c:571
#3  0x080a42b9 in game_loop () at comm.c:679
#4  0x080a3b6a in main (argc=8, argv=0xfef1d220) at comm.c:308


(gdb) f 0
#0  0x08074513 in close_area (pArea=0x91a28b0) at act_wiz.c:5850
5850            if ( rid->area == pArea || exit->to_room->area == pArea )
(gdb) list
5845          rid_next = rid->next;
5846
5847          for ( exit = rid->first_exit; exit; exit = exit_next )
5848          {
5849            exit_next = exit->next;
5850            if ( rid->area == pArea || exit->to_room->area == pArea )
5851            {
5852              STRFREE( exit->keyword );
5853              STRFREE( exit->description );
5854              UNLINK( exit, rid->first_exit, rid->last_exit, next, prev );


Not sure what is wrong, so I'm not sure what to print. But here is some...
(gdb) p *rid
$8 = {next = 0x90f3d40, next_sort = 0x0, first_person = 0x0,
  last_person = 0x0, first_content = 0x0, last_content = 0x0,
  first_extradesc = 0x0, last_extradesc = 0x0, area = 0x91a29e0,
  first_exit = 0x921b540, last_exit = 0x921b5e8, first_affect = 0x0,
  last_affect = 0x0, map = 0x0, plane = 0x9212160, mpact = 0x0, mpactnum = 0,
  mudprogs = 0x0, mpscriptpos = 0,
  name = 0x921b518 "Between Apartments 700-E and 700-F",
  description = 0x8ff8940 "", vnum = 4105, room_flags = 1073741824,
  progtypes = {bits = {0, 0, 0, 0}}, light = 0, sector_type = 1,
  tele_vnum = 0, tele_delay = 0, tunnel = 0, shouki = 0}


(gdb) p *pArea
$9 = {next = 0x91a73b8, prev = 0x91a26b0, next_sort = 0x91a73b8,
  prev_sort = 0x91a2440, next_sort_name = 0x0, prev_sort_name = 0x0,
  first_reset = 0x0, last_reset = 0x0,
  name = 0x91a2980 "{PROTO} Tyke's area in progress",
  filename = 0x91a2970 "Tyke.are", flags = 0, status = 2, age = 0,
  nplayer = 0, reset_frequency = 0, low_r_vnum = 600, hi_r_vnum = 699,
  low_o_vnum = 600, hi_o_vnum = 699, low_m_vnum = 600, hi_m_vnum = 699,
  low_soft_range = 0, hi_soft_range = 0, low_hard_range = 0,
  hi_hard_range = 0, spelllimit = 0, curr_spell_count = 0,
  author = 0x91a2960 "Tyke", era = 0x910aa98 "Modern", resetmsg = 0x0,
  last_mob_reset = 0x0, last_obj_reset = 0x0, max_players = 1, mkills = 0,
  mdeaths = 0, pkills = 0, pdeaths = 0, gold_looted = 0, illegal_pk = 0,
  high_economy = 0, low_economy = 0, weather = 0x91a29a8}


(gdb) p *exit
$10 = {prev = 0x0, next = 0x921b578, rexit = 0x0, to_room = 0x0,
  keyword = 0x8ff8940 "", description = 0x8ff8940 "", vnum = 4104,
  rvnum = 4105, exit_info = 0, key = -1, vdir = 0, distance = 0, pull = 0,
  pulltype = 0, keypad = 0}


So it's comparing Reklah.are to Tyke.are, nothing is null, so I'm not sure why it crashed.
Canada #1
The issue is with exit->to_room->area. exit->to_room is null, as per your p *exit.
USA #2
Ah, didn't notice that while reviewing a chapter in Cisco. Hmmmm. It only happened because I manually changed some wrong vnums to the correct. Thanks.