bug-gnulib
[Top][All Lists]
Advanced

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

Re: [PATCH] poll: fix regression in Win32 emulation of poll function


From: Daniel P. Berrange
Subject: Re: [PATCH] poll: fix regression in Win32 emulation of poll function
Date: Thu, 11 May 2017 13:10:44 +0100
User-agent: Mutt/1.8.0 (2017-02-23)

On Thu, May 11, 2017 at 01:02:14PM +0100, Daniel P. Berrange wrote:
> The previous commit:
> 
>   commit 17f1e64f00011fb745019119e21b26e4aba65e4b
>   Author: Paul Eggert <address@hidden>
>   Date:   Tue Feb 24 16:16:19 2015 -0800
> 
>     poll: port to MSVC v18 on MS-Windows 8.1
> 
>     Problem reported by Gisle Vanem in:
>     http://lists.gnu.org/archive/html/bug-gnulib/2015-02/msg00139.html
>     * lib/poll.c: Always include <sys/select.h> and <sys/socket.h>.
>     * modules/poll (Depends-on) [!HAVE_POLL || REPLACE_POLL]:
>     Add sys_socket.
> 
> attempted to fix a compilation bug, but in doing so it significantly
> changed the semantics of the code. Instead of the poll() wrapper
> calling the WINSOCK native select() & recv() functions, it would
> now call the GNULIB wrapped versions. This is a mistake because
> the former take SOCKET handles, while the latter take FDs. As a
> result, while the poll() code compiled, it didn't actually work
> when used.
> 
> Rather than reverting the above commit, which would reintroduce
> the compile error reporting, we simply undefine the wrappers
> so the code calls the WINSOCK native functions once again.
> 
> Signed-off-by: Daniel P. Berrange <address@hidden>
> ---
>  lib/poll.c | 10 ++++++++++
>  1 file changed, 10 insertions(+)
> 
> diff --git a/lib/poll.c b/lib/poll.c
> index c4b2127..a26838c 100644
> --- a/lib/poll.c
> +++ b/lib/poll.c
> @@ -54,6 +54,16 @@
>  #include <sys/select.h>
>  #include <sys/socket.h>
>  
> +#ifdef WINDOWS_NATIVE
> +/* The Win32 emulation assumes we're using the Winsock native
> + * functions that accept SOCKETs, not the GNULIB wrapped versions
> + * that accept  FDs. The sys/select.h & sys/socket.h header pull
> + * in the wrapped versions, so we must unset them.
> + */
> +# undef recv
> +# undef select
> +#endif
> +
>  #ifdef HAVE_SYS_IOCTL_H
>  # include <sys/ioctl.h>
>  #endif

I've just noticed that Bruno pushed a similar patch to git master
yesterday:

commit 4df5fde5d4f69397f3435c9804da5c88ddc7721e
Author: Bruno Haible <address@hidden>
Date:   Thu May 11 00:38:03 2017 +0200

    poll: Fix link error on native Windows.
    
    * lib/poll.c [WINDOWS_NATIVE]: Undefine recv.


unfortunately while that patch may have fixed a linker error, it
does not actually make poll() function correctly. We're still passing
HANDLE objects to the rpl_select() method, instead of calling
the native select() method.

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|



reply via email to

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