[CODE] Problems with point_update()

From: Artovil (artovil@arcanerealms.org)
Date: 10/23/01


Hello,

I am currently converting my MUD to use mySQL instead of files to store
data.  A couple of days ago I put in the ASCII object patch (objsave.c)
found on the Ceramic Mouse site.  If this has something to do with my
recent crashes I find hard to determine.  This email might be a little long
since I included a full backtrace and code snippets from affected
files.  If someone can help out off-list with this I would be extremely
grateful.  I am going to try to make a hand-patch file out of this when I
am finished so that others can try MySQL as well, but I want things to work
first.

If I create an object in the MUD by a spell or such, and then drop this in
room, the mud crashes upon the call to point_update().  Generally it takes
up to about 10 minutes before it happens if I start the server and create
the object right away and drop it.  If I drop/load a prototyped object it
works fine.  This works on my other port where I am running a regular bpl19
*without* MySQL and ASCII objects (objsave.c).

-------GDB output:----------------------------------------------------
Program received signal SIGSEGV, Segmentation fault.
0x80ca580 in point_update () at limits.c:450
450             for (j = object_list; j && j->next; j = next_thing) {
(gdb) bt
#0  0x80ca580 in point_update () at limits.c:450
#1  0x809195b in heartbeat (pulse=2400) at comm.c:979
#2  0x8091872 in game_loop (mother_desc=6) at comm.c:932
#3  0x8090f42 in init_game (port=9000) at comm.c:500
#4  0x8090b8f in main (argc=5, argv=0xbffff9c4) at comm.c:377
(gdb) bt full
#0  0x80ca580 in point_update () at limits.c:450
         i = (char_data *) 0x0
         next_char = (char_data *) 0x0
         j = (obj_data *) 0x6c616572
         next_thing = (obj_data *) 0x6c616572
         jj = (obj_data *) 0x8
         next_thing2 = (obj_data *) 0x0
#1  0x809195b in heartbeat (pulse=2400) at comm.c:979
         pulse = 2400
         mins_since_crashsave = 0
#2  0x8091872 in game_loop (mother_desc=6) at comm.c:932
         input_set = {fds_bits = {0 <repeats 32 times>}}
         output_set = {fds_bits = {256, 0 <repeats 31 times>}}
         exc_set = {fds_bits = {0 <repeats 32 times>}}
         null_set = {fds_bits = {0 <repeats 32 times>}}
         last_time = {tv_sec = 1003870933, tv_usec = 441781}
         opt_time = {tv_sec = 0, tv_usec = 100000}
         process_time = {tv_sec = 0, tv_usec = 3120}
         temp_time = {tv_sec = 0, tv_usec = 96880}
         before_sleep = {tv_sec = 1003870933, tv_usec = 344901}
         now = {tv_sec = 1003870933, tv_usec = 444877}
         timeout = {tv_sec = 0, tv_usec = 0}
         comm = "look\000parch\000e
word\000\000\000\000\020\000\000\b\000\000\000°ØÕ;\000\000\000\000ø\215\213;\000\000\000\000è¨\n@0\222\027\bè
\004@\b\000\000\000\000\220\000@\000\020\000\000è¨\n@C\025\004@0\222\027\b\000\220\000@\000\020\000\0000\222\027\bè¨\n@",
'\000' <repeats 13 times>, "\t", '\000' <repeats 22 times>, " ", '\000'
<repeats 122 times>
         d = (struct descriptor_data *) 0x0
         next_d = (struct descriptor_data *) 0x0
         pulse = 2400
         missed_pulses = 0
         maxdesc = 0
         aliased = 0
#3  0x8090f42 in init_game (port=9000) at comm.c:500
         port = 9000
#4  0x8090b8f in main (argc=5, argv=0xbffff9c4) at comm.c:377
         argc = 5
         pos = 4
         dir = 0xbffffb18 "/home/a/arcanere/developer/lib"
-----------------------------------------------------------------------

That was the output I received from doing a backtrace.  If you need more
data just let me know how to fetch it from the debugger.

-----------limits.c(450)-----------------------------------------------
        for (j = object_list; j && j->next; j = next_thing) {
                next_thing = j->next;        /* Next in object list */
-----------limits.c----------------------------------------------------

I have converted all world file reading to MySQL but for triggers and
shops.  Perhaps this error might have something to do with index_boot() in
db.c, where it counts records, or perhaps it has something to do with
parse_object that increments top_of_objt since it dies in a loop?  To my
knowledge I am counting my database rows in the same way as the rows in the
files are counted, and the same thing goes for reading everything in.

Please, if you have any useful information and help on this matter, do not
hesitate to reply or contact me directly. :)

Warm regards,
Torgny

--
   +---------------------------------------------------------------+
   | FAQ: http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html |
   | Archives: http://post.queensu.ca/listserv/wwwarch/circle.html |
   +---------------------------------------------------------------+



This archive was generated by hypermail 2b30 : 12/06/01 PST