Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 18 Feb 2004 08:39:09 -0500
From:      John Baldwin <jhb@FreeBSD.org>
To:        Marcel Moolenaar <marcel@xcllnt.net>
Cc:        Jun Kuriyama <kuriyama@imgsrc.co.jp>
Subject:   Re: cvs commit: src/sys/alpha/alpha support.s src/sys/i386/i386 swtch.s src/sys/kern kern_shutdown.c src/sys/sys systm.h
Message-ID:  <200402180839.09285.jhb@FreeBSD.org>
In-Reply-To: <20040218010034.GA64412@ns1.xcllnt.net>
References:  <200401192127.i0JLRBL3041817@repoman.freebsd.org> <20040218093149.A19121@gamplex.bde.org> <20040218010034.GA64412@ns1.xcllnt.net>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tuesday 17 February 2004 08:00 pm, Marcel Moolenaar wrote:
> On Wed, Feb 18, 2004 at 09:43:16AM +1100, Bruce Evans wrote:
> > > Alternatively, we could extend KASSERT to emit a file and line
> > > number like assert(3) and instead of panic(). Seems very logical
> > > to me.
> >
> > That feature was intentionally left out when KASSERT() was designed.
> > For some reason, we decided to give the invoker of KASSERT() complete
> > control over the message contents (unlike in userland where the message
> > is the condition stingized and followed by __FILE__ and __LINE__.
> > Presumably this was partly to permit use of existing panic messages
> > verbatim.  I'm not completely happy with the results of this at any
> > level, especially at the source level.  It requires and ugly syntax
> > (another layer of parentheses around the message), and is harder to
> > write and can be harder to read (writers have to think about what to
> > put in the message; it's normal to invert the sense of the assertion
> > and not unknown to make logic errors doing so; then readers don't
> > see the original condition in the panic message).
>
> I tend to agree. Most of the KASSERTs I put in have the bogus message
> "foo", simply because I cannot explain in a single sentence what's
> wrong and I don't want to break my flow of thinking while coding to
> come up with something. Hence, I either use a bogus "foo" or forget
> about the KASSERT altogether. The former is less bad than the latter,
> but not good at all.
> I prefer to put a comprehensive comment in front of the KASSERT and
> have people look there by having the KASSERT emit the file and line.
> The panic message that's the result of the failed assertion can be
> constant and should inform that the panic is the result of KASSERT.
> Alternatively, it can print the condition that failed.
>
> phk's change gave me the file and line, so it gave me something I
> liked. If that's going to be reverted, maybe people won't object to
> having KASSERT emit the file and line and no specific panic message
> at all?

Use MPASS() (macros that came in with SMPng from BSD/OS).  MPASS(foo) will 
work much like assert() in userland including file/line number info.  I use 
it a lot for simple != NULL tests and the like.

-- 
John Baldwin <jhb@FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve"  =  http://www.FreeBSD.org



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200402180839.09285.jhb>