extract_obj crash

From: John Evans (evansj@HI-LINE.NET)
Date: 04/11/98

Core was generated by `bin/spear -q 1066'.
Program terminated with signal 11, Segmentation fault.
Reading symbols from /lib/libc.so.5...done.
Reading symbols from /lib/ld-linux.so.1...done.
#0  0x807df90 in extract_obj (obj=0x81fc4c0) at handler.c:879
879       REMOVE_FROM_LIST(obj, object_list, next);
(gdb) bt
#0  0x807df90 in extract_obj (obj=0x81fc4c0) at handler.c:879
#1  0x807763b in reset_zone (zone=21) at db.c:1974
#2  0x8064e53 in do_zreset (ch=0x81f8488, argument=0xbffff9e0 " .",
    cmd=466, subcmd=0, is_order=0) at act.wizard.c:1239
#3  0x8084b5c in command_interpreter (ch=0x81f8488,
    argument=0xbffff9dc "zres .", is_order=0) at interpreter.c:959
#4  0x807003a in game_loop (mother_desc=3) at comm.c:534
#5  0x806f778 in init_game (port=1066) at comm.c:205
#6  0x806f707 in main (argc=3, argv=0xbffffe44) at comm.c:177
#7  0x80493fe in _start ()
(gdb) list
875       /* Get rid of the contents of the object, as well. */
876       while (obj->contains)
877         extract_obj(obj->contains);
879       REMOVE_FROM_LIST(obj, object_list, next);
881       if (GET_OBJ_RNUM(obj) >= 0)
882         (obj_index[GET_OBJ_RNUM(obj)].number)--;


When extracting the second object that is to be extracted since the game
booted, the game crashes. I've compared my extract_obj() and
REMOVE_FROM_LIST against stock code and they are identical, so the cause
of the crash has to be from somewhere outside these sections of code.

I have no clue as to what is causing this at all. It's as if items are not
being added to the object_list properly, or are being removed from the
object_list prior to extract_obj() being called. Following this idea, I
checked read_object() and found it identical to stock. I also grepped for
object_list and check all occurances. Everything there is stock for
adding/removing to/from the object_list.

I crashed my test port 14 times within the past hour to see if I can glean
the cause of the crash. From the looks of things it is crashing when
it hits the first or last item in object_list while extracting the
obj after extract_obj() has been called once before on that object.

Oh jeez... I hope this makes sense to someone out there because I am
totally missing the cause.

If someone could glean some light on this one, please help me out.

Thank you,
John Evans <evansj@hi-line.net>  --  http://www.hi-line.net/~evansj/

Any sufficiently advanced technology is indistinguishable from magic.
--Arthur C. Clarke

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

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