From fc3a735d42a0dcd748b6b8dc2c63bafde01effd0 Mon Sep 17 00:00:00 2001 From: Matthieu Herrb Date: Sat, 28 Dec 2013 14:40:03 +0000 Subject: Update to xserver 1.14.5 --- xserver/Xext/sync.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'xserver/Xext') diff --git a/xserver/Xext/sync.c b/xserver/Xext/sync.c index 1e3d43ee6..4ed60fdb6 100644 --- a/xserver/Xext/sync.c +++ b/xserver/Xext/sync.c @@ -2654,7 +2654,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 -- cgit v1.2.3