[PATCH] sync: Avoid ridiculously long timeouts
Matthieu Herrb
matthieu at herrb.eu
Sun Dec 15 23:04:39 PST 2013
On Sun, Dec 15, 2013 at 02:31:10PM +0100, Mark Kettenis wrote:
> From: Mark Kettenis <kettenis at openbsd.org>
>
> On OpenBSD, passing a timeout longer than 100000000 seconds to select(2) will
> make it fail with EINVAL. As this is original 4.4BSD behaviour it is not
> inconceivable that other systems suffer from the same problem. And Linux,
> though not suffering from any 4.4BSD heritage, briefly did something similar:
>
> <https://lkml.org/lkml/2012/8/31/263>
>
> So avoid calling AdjustWaitForDelay() instead of setting the timeout to
> (effectively) ULONG_MAX milliseconds.
>
> Signed-off-by: Mark Kettenis <kettenis at openbsd.org>
Reviewed-by: Matthieu Herrb <matthieu at herrb.eu>
> ---
> Xext/sync.c | 7 ++-----
> 1 file changed, 2 insertions(+), 5 deletions(-)
>
> diff --git a/Xext/sync.c b/Xext/sync.c
> index 2d58ea1..c33b5b5 100644
> --- a/Xext/sync.c
> +++ b/Xext/sync.c
> @@ -2731,27 +2731,24 @@ IdleTimeBlockHandler(pointer pCounter, struct timeval **wt, pointer LastSelectMa
> * If we've been idle more than it, and someone wants to know about
> * that level-triggered, schedule an immediate wakeup.
> */
> - unsigned long timeout = -1;
>
> if (XSyncValueLessThan(idle, *greater)) {
> XSyncValue value;
> Bool overflow;
>
> XSyncValueSubtract(&value, *greater, idle, &overflow);
> - timeout = min(timeout, XSyncValueLow32(value));
> + AdjustWaitForDelay(wt, XSyncValueLow32(value));
> }
> else {
> for (list = counter->sync.pTriglist; list;
> list = list->next) {
> trig = list->pTrigger;
> if (trig->CheckTrigger(trig, old_idle)) {
> - timeout = min(timeout, 0);
> + AdjustWaitForDelay(wt, 0);
> break;
> }
> }
> }
> -
> - AdjustWaitForDelay(wt, timeout);
> }
>
> counter->value = old_idle; /* pop */
> --
> 1.8.4.3
>
> _______________________________________________
> 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
--
Matthieu Herrb
More information about the xorg-devel
mailing list