Here's a subtle bug for people.
Upon booting in mini-mud mode on Solaris, I suspected a memory overrun and
traced it to the assign_kings_castle() function of castle.c. In the
function, there are assignments such as:
C_MOB_SPEC(Z_KINGS_C, 0) = CastleGuard; /* Gwydion */
This looks innocent enough until you look at the definition of C_MOB_SPEC:
#define C_MOB_SPEC(zone,mob) (mob_index[real_mobile(((zone)*100)+(mob))].func)
Notice there is *no error checking* if the mob doesn't exist. So you you
do not have this mob, as is the case for mini-mud mode, you will be
assigning a special procedure to mob_index[-1].func for every one that is
missing.
My temporary workaround for this problem was to change the definition to:
#define C_MOB_SPEC(zone,mob) \
if ((check = real_mobile(((zone)*100)+(mob))) < 0) {\
log("Ack! A -1"); \
} else \
mob_index[check].func
and to add an 'int check;' to the top of assign_kings_castle();
This is the output in mini-mud mode:
[snip]
Wed Sep 10 12:47:57 :: Assigning function pointers:
Wed Sep 10 12:47:57 :: Mobiles.
Wed Sep 10 12:47:57 :: Ack! A -1
Wed Sep 10 12:47:57 :: Ack! A -1
Wed Sep 10 12:47:57 :: Ack! A -1
[snip]
I am not totally sure if this is what was causing OasisOLC to crash...I'll
investigate some more.
(Note that this bug will not affect normal (non -m) MUD mode.)
--
George Greer - Me@Null.net | Genius may have its limitations, but stupidity
http://www.van.ml.org/~greerga | is not thus handicapped. -- Elbert Hubbard
+------------------------------------------------------------+
| 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/08/00 PST