From bd3154a861d7ed0c68c687dcaa214a181ffb9f9d Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 20 Mar 2009 13:29:42 +0100 Subject: introduce pa_assert_fp() for fast path assertions --- src/daemon/main.c | 8 ++++++++ src/pulsecore/macro.h | 20 ++++++++++++++++---- 2 files changed, 24 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/daemon/main.c b/src/daemon/main.c index 0048e7b7..47ca2673 100644 --- a/src/daemon/main.c +++ b/src/daemon/main.c @@ -851,6 +851,14 @@ int main(int argc, char *argv[]) { pa_log_debug(_("Optimized build: no")); #endif +#ifdef NDEBUG + pa_log_debug(_("NDEBUG defined, all asserts disabled.")); +#elif defined(FASTPATH) + pa_log_debug(_("FASTPATH defined, only fast path asserts disabled.")); +#else + pa_log_debug(_("All asserts enabled.")); +#endif + if (!(s = pa_machine_id())) { pa_log(_("Failed to get machine ID")); goto finish; diff --git a/src/pulsecore/macro.h b/src/pulsecore/macro.h index 20015bf5..309f1a0d 100644 --- a/src/pulsecore/macro.h +++ b/src/pulsecore/macro.h @@ -164,8 +164,8 @@ typedef int pa_bool_t; #define pa_return_null_if_fail(expr) pa_return_val_if_fail(expr, NULL) -/* An assert which guarantees side effects of x, i.e. is never - * optimized away */ +/* pa_assert_se() is an assert which guarantees side effects of x, + * i.e. is never optimized away, regardless of NDEBUG or FASTPATH. */ #define pa_assert_se(expr) \ do { \ if (PA_UNLIKELY(!(expr))) { \ @@ -174,11 +174,23 @@ typedef int pa_bool_t; } \ } while (FALSE) -/* An assert that may be optimized away by defining NDEBUG */ +/* Does exactly nothing */ +#define pa_nop() do {} while (FALSE) + +/* pa_assert() is an assert that may be optimized away by defining + * NDEBUG. pa_assert_fp() is an assert that may be optimized away by + * defining FASTPATH. It is supposed to be used in inner loops. It's + * there for extra paranoia checking and should probably be removed in + * production builds. */ #ifdef NDEBUG -#define pa_assert(expr) do {} while (FALSE) +#define pa_assert(expr) pa_nop() +#define pa_assert_fp(expr) pa_nop() +#elif defined (FASTPATH) +#define pa_assert(expr) pa_assert_se(expr) +#define pa_assert_fp(expr) pa_nop() #else #define pa_assert(expr) pa_assert_se(expr) +#define pa_assert_fp(expr) pa_assert_se(expr) #endif #define pa_assert_not_reached() \ -- cgit