Commit 3e0d833a authored by Thomas Guillem's avatar Thomas Guillem

compat: poll: work around event loss on WIN32

Signed-off-by: Steve Lhomme's avatarSteve Lhomme <robux4@videolabs.io>
Signed-off-by: Jean-Baptiste Kempf's avatarJean-Baptiste Kempf <jb@videolan.org>
parent 70cd5079
......@@ -109,7 +109,7 @@ int (poll) (struct pollfd *fds, unsigned nfds, int timeout)
# include <windows.h>
# include <winsock2.h>
int poll(struct pollfd *fds, unsigned nfds, int timeout)
static int poll_compat(struct pollfd *fds, unsigned nfds, int timeout)
{
DWORD to = (timeout >= 0) ? (DWORD)timeout : INFINITE;
......@@ -251,4 +251,21 @@ int poll(struct pollfd *fds, unsigned nfds, int timeout)
}
return count;
}
int poll(struct pollfd *fds, unsigned nfds, int timeout)
{
if (timeout == -1)
{
/* HACK: In some cases, we lose some events because events are
* destroyed and recreated only when we need to poll. In order to work
* arround this issue, we try to call the poll compat function every
* 100ms (in case of infinite timeout). */
int ret;
while ((ret = poll_compat(fds, nfds, 100)) == 0);
return ret;
}
else
return poll_compat(fds, nfds, timeout);
}
#endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment