svn commit: r210875 - head/sbin/hastd
Pawel Jakub Dawidek
pjd at FreeBSD.org
Thu Aug 5 18:26:38 UTC 2010
Author: pjd
Date: Thu Aug 5 18:26:38 2010
New Revision: 210875
URL: http://svn.freebsd.org/changeset/base/210875
Log:
Problem with assertion is that it logs on stderr. Add two macros:
PJDLOG_ASSERT() and PJDLOG_VERIFY() that will check the given condition
and log the problem where appropriate. The difference between those
two is that PJDLOG_VERIFY() always work and PJDLOG_ASSERT() can be
turned off by defining NDEBUG.
MFC after: 1 month
Modified:
head/sbin/hastd/pjdlog.c
head/sbin/hastd/pjdlog.h
Modified: head/sbin/hastd/pjdlog.c
==============================================================================
--- head/sbin/hastd/pjdlog.c Thu Aug 5 18:26:03 2010 (r210874)
+++ head/sbin/hastd/pjdlog.c Thu Aug 5 18:26:38 2010 (r210875)
@@ -365,3 +365,23 @@ pjdlog_exitx(int exitcode, const char *f
/* NOTREACHED */
va_end(ap);
}
+
+/*
+ * Log assertion and exit.
+ */
+void
+pjdlog_verify(const char *func, const char *file, int line,
+ const char *failedexpr)
+{
+
+ if (func == NULL) {
+ pjdlog_critical("Assertion failed: (%s), file %s, line %d.",
+ failedexpr, file, line);
+ } else {
+ pjdlog_critical("Assertion failed: (%s), function %s, file %s, line %d.",
+ failedexpr, func, file, line);
+ }
+ abort();
+ /* NOTREACHED */
+}
+
Modified: head/sbin/hastd/pjdlog.h
==============================================================================
--- head/sbin/hastd/pjdlog.h Thu Aug 5 18:26:03 2010 (r210874)
+++ head/sbin/hastd/pjdlog.h Thu Aug 5 18:26:38 2010 (r210875)
@@ -85,4 +85,17 @@ void pjdlogv_exit(int exitcode, const ch
void pjdlog_exitx(int exitcode, const char *fmt, ...) __printflike(2, 3) __dead2;
void pjdlogv_exitx(int exitcode, const char *fmt, va_list ap) __printflike(2, 0) __dead2;
+void pjdlog_verify(const char *func, const char *file, int line,
+ const char *failedexpr) __dead2;
+
+#define PJDLOG_VERIFY(expr) do { \
+ if (!(expr)) \
+ pjdlog_verify(__func__, __FILE__, __LINE__, #expr); \
+} while (0)
+#ifdef NDEBUG
+#define PJDLOG_ASSERT(expr) do { } while (0)
+#else
+#define PJDLOG_ASSERT(expr) PJDLOG_VERIFY(expr)
+#endif
+
#endif /* !_PJDLOG_H_ */
More information about the svn-src-head
mailing list