summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Xext/sync.c11
-rw-r--r--configure.ac2
-rw-r--r--os/backtrace.c5
3 files changed, 14 insertions, 4 deletions
diff --git a/Xext/sync.c b/Xext/sync.c
index 126ce43a1..a04c38388 100644
--- a/Xext/sync.c
+++ b/Xext/sync.c
@@ -2682,7 +2682,16 @@ IdleTimeBlockHandler(pointer pCounter, struct timeval **wt, pointer LastSelectMa
IdleTimeQueryValue(counter, &idle);
counter->value = idle; /* push, so CheckTrigger works */
- if (less && XSyncValueLessOrEqual(idle, *less)) {
+ /**
+ * There's an indefinite amount of time between ProcessInputEvents()
+ * where the idle time is reset and the time we actually get here. idle
+ * may be past the lower bracket if we dawdled with the events, so
+ * check for whether we did reset and bomb out of select immediately.
+ */
+ if (less && XSyncValueGreaterThan(idle, *less) &&
+ LastEventTimeWasReset(priv->deviceid)) {
+ AdjustWaitForDelay(wt, 0);
+ } else if (less && XSyncValueLessOrEqual(idle, *less)) {
/*
* We've been idle for less than the threshold value, and someone
* wants to know about that, but now we need to know whether they
diff --git a/configure.ac b/configure.ac
index c48d2aad8..3d9832b69 100644
--- a/configure.ac
+++ b/configure.ac
@@ -296,7 +296,7 @@ AC_CHECK_HEADER([machine/apmvar.h],[
AM_CONDITIONAL(BSD_APM, [test "x$ac_cv_BSD_APM" = xyes])
AM_CONDITIONAL(BSD_KQUEUE_APM, [test "x$ac_cv_BSD_KQUEUE_APM" = xyes])
-dnl glibc backtrace support check (hw/xfree86/common/xf86Events.c)
+dnl glibc backtrace support check
AC_CHECK_HEADER([execinfo.h],[
AC_CHECK_LIB(c, backtrace, [
AC_DEFINE(HAVE_BACKTRACE, 1, [Has backtrace support])
diff --git a/os/backtrace.c b/os/backtrace.c
index 426f9b15b..3d1195b86 100644
--- a/os/backtrace.c
+++ b/os/backtrace.c
@@ -114,14 +114,15 @@ xorg_backtrace(void)
void
xorg_backtrace(void)
{
- void *array[64];
+ const int BT_SIZE = 64;
+ void *array[BT_SIZE];
const char *mod;
int size, i;
Dl_info info;
ErrorFSigSafe("\n");
ErrorFSigSafe("Backtrace:\n");
- size = backtrace(array, 64);
+ size = backtrace(array, BT_SIZE);
for (i = 0; i < size; i++) {
int rc = dladdr(array[i], &info);