[PATCH] sync: fix corner-case in triggering idle alarms
Peter Hutterer
peter.hutterer at who-t.net
Tue Nov 12 23:52:59 PST 2013
On Wed, Oct 30, 2013 at 04:26:05PM +1000, Peter Hutterer wrote:
> ProcessInputEvent() resets the device idle times. If idle time was higher than
> the lower bracket, this should trigger an event in the idle time wakeup
> handler.
>
> If processing is slow, the idle time may advance past the lower bracket
> between the reset and the time the BlockHandler is called. In that case, we'd
> never schedule a wakeup to handle the event, causing us to randomly miss
> events.
>
> Ran tests with a neg transition trigger on 5ms with 200 repeats of the test
> and it succeeded. Anything below that gets a bit tricky to make sure the
> server sees the same idle time as the client usleeps for.
>
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
Matt, please pull this into 1.14. Thanks.
git cherry-pick -x f36f5a65f639b6524191d888d5bf89e73027156c
Cheers,
Peter
> ---
> Xext/sync.c | 11 ++++++++++-
> 1 file changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/Xext/sync.c b/Xext/sync.c
> index b2ee92e..53f769d 100644
> --- a/Xext/sync.c
> +++ b/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
> --
> 1.8.3.1
>
> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel
>
More information about the xorg-devel
mailing list