On Fri, Jun 22, 2012 at 11:22:31AM -0400, Mathieu Desnoyers wrote: > * Josh Triplett ([email protected]) wrote: > > #undef NDEBUG > > #include <assert.h> > > > > Or if you don't consider that sufficient for some reason, you could > > define your own assert(), but that seems like an odd thing to not count > > on. Nonetheless, if you define your own assert, I'd still suggest > > making it look as much like assert() as possible, including the call to > > abort(). > > #undef NDEBUG is unwanted, due to its side-effects. We use "assert()" in > other locations of the code, for which we want the assertion check to be > disabled if NDEBUG is defined in production.
Ah, fair enough. > I agree with you that calling "abort()" is exactly what we want, and > it's much more standard that sending a signal chosen with a fair roll of > dices. How about the following ? > > [...] > diff --git a/urcu-die.h b/urcu-die.h > new file mode 100644 > index 0000000..227c8dc > --- /dev/null > +++ b/urcu-die.h > @@ -0,0 +1,37 @@ > +#ifndef _URCU_DIE_H > +#define _URCU_DIE_H > + > +/* > + * urcu-die.h > + * > + * Userspace RCU library unrecoverable error handling > + * > + * Copyright (c) 2012 Mathieu Desnoyers <[email protected]> > + * > + * This library is free software; you can redistribute it and/or > + * modify it under the terms of the GNU Lesser General Public > + * License as published by the Free Software Foundation; either > + * version 2.1 of the License, or (at your option) any later version. > + * > + * This library is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + * Lesser General Public License for more details. > + * > + * You should have received a copy of the GNU Lesser General Public > + * License along with this library; if not, write to the Free Software > + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 > USA > + */ > + > +#include <stdlib.h> > +#include <stdio.h> > +#include <string.h> > + > +#define urcu_die(cause) > \ > +do { > \ > + fprintf(stderr, "(" __FILE__ ":%s@%u) Unrecoverable error: %s\n", > \ > + __func__, __LINE__, strerror(cause)); > \ > + abort(); > \ > +} while (0) > + > +#endif /* _URCU_DIE_H */ > [...] That looks reasonable; you've effectively recreated assert, but in a form that will always have the same effect regardless of NDEBUG. - Josh Triplett _______________________________________________ lttng-dev mailing list [email protected] http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
