[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: 'select' on MS-Windows returns without waiting for pipes

From: Pádraig Brady
Subject: Re: 'select' on MS-Windows returns without waiting for pipes
Date: Tue, 10 Jun 2014 00:55:14 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130110 Thunderbird/17.0.2

On 06/08/2014 04:32 PM, Eli Zaretskii wrote:
> The gnulib implementation of 'select' for MS-Windows returns
> immediately with a zero value when it is called to wait for input from
> an anonymous pipe (e.g., a pipe created by a call to 'pipe' or
> 'pipe2').  This was discussed here in this thread:
>   http://lists.gnu.org/archive/html/bug-gnulib/2011-06/msg00008.html
> I bumped into this independently today while running the Guile's test
> suite on MS-Windows.  Guile uses 'select', among other places, in its
> implementation of 'sleep' and 'usleep' primitives.  It calls 'select'
> with a file descriptor of a signal delivery pipe, which is written to
> (by another thread) when Guile is interrupted by a signal.  But due to
> the above-mentioned problem, these two functions never sleep, and
> instead return immediately.
> I suggest the following changes to work around the issue.  These
> changes also zero out the 'timeout' argument if the timeout period
> expires with no data or signal available; this seems to be what some
> programs (Guile among them) expect.

The reasoning seems sound.
Thanks for the detail.

> +  /* How much is left to wait?  */
> +  if (wait_timeout != INFINITE)
> +    {
> +      wait_timeout = tend - clock ();
> +      if (wait_timeout < 0)
> +     wait_timeout = 0;

Strange indenting here.
More importantly DWORD is an unsigned type according to a quick search,
so the < 0 check is incorrect?


reply via email to

[Prev in Thread] Current Thread [Next in Thread]