[vlc-devel] [PATCH] win32: use the same poll code as libcurl

Rémi Denis-Courmont remi at remlab.net
Sat Nov 28 15:16:36 CET 2015

On Thursday 26 November 2015 16:43:15 Steve Lhomme wrote:
>  A workaround is to close the httpd
> connection before joining the thread that's doing the listening. But
> that should be done in other places too that assume select() is
> alertable.

No. Closing a file descriptor in use by another thread is not portable, and it 
is intrinsically racy:

- Owner thread calls closesocket().
- Polling thread calls select().
-> gets EBADF.

Or worse:

- Owner thread calls closesocket().
- Unrelated thread create a new socket, gets the same handle.
- Owner thread calls join().
- Polling thread calls select().
-> Polling thread waits on an innocent socket.
-> Owner thread jams.

> Is there a reason we mix select() and WSAEventSelect() in the current
> master ?

AFAIR without the select() call, the poll() level-triggered semantics are not 
abode by so events sometimes can get lost depending on the call site.

Rémi Denis-Courmont

More information about the vlc-devel mailing list