Ok, it looks like it's crashing with the IS_IMMORTAL() macro which
really points to get_trust().  However, without the line numbers in your
do_clan_talk() function, we don't know which IS_IMMORTAL() macro crashed
it...either, IS_IMMORTAL(ch) or IS_IMMORTAL(d->character) further down in
the function.

- Will

Strife Daemonkin

----- Original Message -----
From: "MarkD" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Saturday, January 05, 2002 11:04 PM
Subject: Very odd crashes [sorta-long]


> Hey list,
>    This has been happening lately for no good reason that i can figure
out.
> The mud has been crashing whenever someone uses the 'clan talk' command.
> Does anyone have any idea why this is crashing? Here's the gdb output (the
> clan talk command is below it)
>
> #0  get_trust (ch=0x0) at handler.c:729
> 729         if ( ch->desc != NULL && ch->desc->original != NULL )
> (gdb) bt
> #0  get_trust (ch=0x0) at handler.c:729
> #1  0x8075601 in do_clan_talk (ch=0x40704278,
>     argument=0xbfffe8dd "Do I get to kill him?") at clan.c:1140
> #2  0x8095c91 in interpret (ch=0x40704278,
>     argument=0xbfffe8d4 "newbreed Do I get to kill him?") at interp.c:718
> #3  0x8070bcd in substitute_alias (d=0x40961fa4,
>     argument=0x409623c1 "newbreed Do I get to kill him?") at alias.c:95
> #4  0x8075da1 in game_loop_unix (control=4) at comm.c:818
> #5  0x8075929 in main (argc=2, argv=0xbffffd04) at comm.c:448
> (gdb) print ch->name
> Cannot access memory at address 0x7c
> (gdb) up
> #1  0x8075601 in do_clan_talk (ch=0x40704278,
>     argument=0xbfffe8dd "Do I get to kill him?") at clan.c:1140
> 1140                    if ( (d->connected == CON_PLAYING &&    /*is
> playing*/
> (gdb) print ch->name
> $1 = 0x409a7d94 "Menelaus"
> (gdb)
>
> (Sorry about the formatting if it looks a little rough)
>
> void do_clan_talk(CHAR_DATA *ch, char *argument)
> {
>                 DESCRIPTOR_DATA *d;
> char buf[MSL];
>
> if(IS_IMMORTAL(ch))
> {
> send_to_char("Use the clantalk command.\n\rType 'help clantalk' to see
> info on it.\n\r",ch);
> return;
> }
>
> if (!is_clan(ch))
> {
> send_to_char("You aren't in a clan.\n\r",ch);
> return;
> }
>
> if ( argument[0] == '\0' )
> {
> if (IS_SET(ch->comm,COMM_NOCLAN))
> {
>         send_to_char("Clan channel is now ON\n\r",ch);
>     REMOVE_BIT(ch->comm,COMM_NOCLAN);
> }
> else
> {
> send_to_char("Clan channel is now OFF\n\r",ch);
> SET_BIT(ch->comm,COMM_NOCLAN);
> }
> return;
>     }
>
> if (IS_SET(ch->comm,COMM_NOCHANNELS))
> {
> send_to_char("The gods have revoked your channel priviliges.\n\r",ch);
> return;
> }
>
> REMOVE_BIT(ch->comm,COMM_NOCLAN);
>
> sprintf(buf,"%s: {wYou '%s'{x\n\r", clan_table[ch->clan].who_name,
> argument);
> send_to_char(buf, ch); /*sends to char*/
>
> for ( d = descriptor_list; d != NULL; d = d->next )
> {
> if ( (d->connected == CON_PLAYING && /*is playing*/
>               d->character != ch && /*isn't sender*/
>       is_same_clan(ch,d->character) && /*same clan as sender*/
>              !IS_SET(d->character->comm,COMM_NOCLAN) && /*doesn't have
> noclan on*/
> !IS_SET(d->character->comm,COMM_QUIET)) || /*doesn't have quiet mode
> on*/
> IS_IMMORTAL(d->character)) /* is an imm */
> {
>   sprintf(buf,"%s: {w%s '%s'{x\n\r", clan_table[ch->clan].who_name,
> ch->name, argument);
> send_to_char(buf, d->character); /*sends to mud */
> }
> else if(IS_IMMORTAL(d->character) && (d->character != ch) &&
> (is_same_clan(ch,d->character)))
> {
> sprintf(buf,"%s: {w%s '%s'{x\n\r", clan_table[ch->clan].who_name,
> ch->name, argument);
> send_to_char(buf, d->character);
> } /* this function sends it to all imms */
>     }
>     return;
> }
>
>
> _____________________________________________
> Free email with personality! Over 200 domains!
> http://www.MyOwnEmail.com
>
>
> --
> ROM mailing list
> [email protected]
> http://www.rom.org/cgi-bin/mailman/listinfo/rom
>


Reply via email to