main-loop: narrow win32 pollfds_fill() event bitmasks
commit8db165b36ef893ac69af0452f20eeb78e7b26b5a
authorStefan Hajnoczi <stefanha@redhat.com>
Thu, 16 May 2013 15:36:00 +0000 (16 17:36 +0200)
committerAnthony Liguori <aliguori@us.ibm.com>
Thu, 16 May 2013 19:18:47 +0000 (16 14:18 -0500)
tree75e19a7e9017e41baeef3ef1d47d4b733cdce9aa
parent6d46895b51103fa26c97ee0e0d895c004e9594d7
main-loop: narrow win32 pollfds_fill() event bitmasks

pollfds_fill() and pollfds_poll() translate GPollFD to rfds/wfds/xfds
for sockets on win32.  select(2) is the underlying system call which is
used to monitor sockets for activity.

Currently file descriptors that monitor G_IO_ERR will be included in
both rfds and wfds.  As a result, select(2) will report writability on
file descriptors where we only really wanted to monitor readability
(with errors).

slirp_pollfds_poll() hit this issue: UDP sockets are blocking sockets so
we hang in sorecvfrom() when G_IO_ERR is set due to the socket being
writable (we only wanted to check for readability).

This patch fixes the slirp_pollfds_poll() hang.

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-id: 1368718561-7816-2-git-send-email-stefanha@redhat.com
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
main-loop.c