On 07/14/2011 10:50 AM, Alon Levy wrote:
Add a backtrace printing function copied from xserver os/backtrace.c
that uses gstack which seems to be available enough that xserver uses it :)
Used in ASSERT, tested on F15.
---
diff --git a/common/backtrace.c b/common/backtrace.c
+
+        while (!done) {
+            bytesread = read(pipefd[0], btline, sizeof(btline) - 1);
+
+            if (bytesread>  0) {
+                btline[bytesread] = 0;
+                red_printf("%s", btline);

nitpick: why not just printf similarly to ASSERT below ?

+            }
+            else if ((bytesread<  0) ||
+                     ((errno != EINTR)&&  (errno != EAGAIN)))
+                done = 1;

This seems wrong. If read() fails due to EINTR or EAGAIN this condition breaks out of the while loop.
I think it should be
    ((bytesread < 0) && (errno != EINTR) && (errno != EAGAIN))

or (break when read() returns the value 0 -- end of file)
    ((bytesread == 0) || ((errno != EINTR)&&  (errno != EAGAIN)))

+        }
diff --git a/common/spice_common.h b/common/spice_common.h

  #define ASSERT(x) if (!(x)) {                               \
      printf("%s: ASSERT %s failed\n", __FUNCTION__, #x);     \
+    backtrace();                                           \
      abort();                                                \
  }


_______________________________________________
Spice-devel mailing list
Spice-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/spice-devel

Reply via email to