[cairo] [PATCH, pixman] Disable asserts and selfchecks for stable pixman releases

Soeren Sandmann sandmann at daimi.au.dk
Fri Dec 11 08:31:06 PST 2009


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.

Unless I hear otherwise, I'll put this in the stable branch and then
make a stable pixman 0.16.4 release.

Comments welcome,

 pixman/pixman-region.c |   41 ++++++++++++++++++++++++++++++++++++-----
 1 files changed, 36 insertions(+), 5 deletions(-)

diff --git a/pixman/pixman-region.c b/pixman/pixman-region.c
index f88955f..df38ea0 100644
--- a/pixman/pixman-region.c
+++ b/pixman/pixman-region.c
@@ -66,9 +66,42 @@
 #define GOOD_RECT(rect) ((rect)->x1 < (rect)->x2 && (rect)->y1 < (rect)->y2)
 #define BAD_RECT(rect) ((rect)->x1 > (rect)->x2 || (rect)->y1 > (rect)->y2)
+/* Turn on debugging depending on what type of release this is
+ */
+#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
+/* 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
+#ifndef FATAL_BUGS
+#    define assert(expr)
+#    define abort()
 static void
 log_region_error (const char *function, const char *message)
@@ -83,9 +116,7 @@ log_region_error (const char *function, const char *message)
 		 "Set a breakpoint on 'log_region_error' to debug\n\n",
                  function, message);
-        abort ();
+        abort (); /* This is #defined away unless FATAL_BUGS is defined */

More information about the cairo mailing list