From 54f51c4a7595d685397838006ba67473eee47e7d Mon Sep 17 00:00:00 2001 From: =?utf8?q?S=C3=B8ren=20Sandmann=20Pedersen?= Date: Fri, 11 Dec 2009 11:14:19 -0500 Subject: [PATCH] region: Enable or disable fatal errors and selfchecks based on version number There is a couple of bugs in bugzilla where bugs in the X server triggered asserts in the pixman region code. It is probably better to let the X server survive this. (In fact, I thought I had disabled them for 0.16.0, but apparently not). The patch below uses these rules: - In _stable_ pixman releases, assertions and selfchecks are turned off. Assertions, so that the X server doesn't die. Selfchecks, for performance reasons. - In _unstable_ pixman releases, both assertions and selfcheck are turned on. These releases are what get added to development distributions such as rawhide, so we want as much self-checking as possible. - In _random git checkouts_, assertions are enabled, so that bugs are caught, but selfchecks are disabled so that you can use them for performance work without having to fiddle with turning selfchecks off. --- pixman/pixman-region.c | 43 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 5 deletions(-) diff --git a/pixman/pixman-region.c b/pixman/pixman-region.c index f88955f..8ce5deb 100644 --- a/pixman/pixman-region.c +++ b/pixman/pixman-region.c @@ -66,9 +66,44 @@ #define GOOD_RECT(rect) ((rect)->x1 < (rect)->x2 && (rect)->y1 < (rect)->y2) #define BAD_RECT(rect) ((rect)->x1 > (rect)->x2 || (rect)->y1 > (rect)->y2) -#define noPIXMAN_REGION_LOG_FAILURES +/* Turn on debugging depending on what type of release this is + */ -#if defined PIXMAN_REGION_LOG_FAILURES || defined PIXMAN_REGION_DEBUG +#if ((PIXMAN_VERSION_MICRO % 2) == 1) +/* Random git checkout. + * + * Those are often used for performance work, so we don't turn on the + * full self-checking, but we do turn on the asserts. + */ +# define FATAL_BUGS +# define noSELF_CHECKS +#elif ((PIXMAN_VERSION_MINOR % 2) == 0) +/* Stable release. + * + * We don't want assertions because the X server should stay alive + * if possible. We also don't want self-checks for performance-reasons. + */ +# define noFATAL_BUGS +# define noSELF_CHECKS +#else +/* Development snapshot. + * + * These are the things that get shipped in development distributions + * such as Rawhide. We want both self-checking and fatal assertions + * to catch as many bugs as possible. + */ +# define FATAL_BUGS +# define SELF_CHECKS +#endif + +#ifndef FATAL_BUGS +# undef assert +# undef abort +# define assert(expr) +# define abort() +#endif + +#ifdef SELF_CHECKS static void log_region_error (const char *function, const char *message) @@ -83,9 +118,7 @@ log_region_error (const char *function, const char *message) "Set a breakpoint on 'log_region_error' to debug\n\n", function, message); -#if defined PIXMAN_REGION_DEBUG - abort (); -#endif + abort (); /* This is #defined away unless FATAL_BUGS is defined */ n_messages++; } -- 2.7.4