[vlc-devel] [PATCH] Windows store: don't call read() before poll() on network sockets

Rafaël Carré funman at videolan.org
Mon Oct 21 18:17:28 CEST 2013

Le 21/10/2013 18:12, Denis Charmet a écrit :
> Le lundi 21 octobre 2013 à 03:05:01, Rafaël Carré a écrit :
>> +    /* With winrtsock winsocks emulation library, the first call to read()
>> +     * before poll() starts an asynchronous transfer and returns 0.
>> +     * Always call poll() first.
>> +     */
>> +    goto do_poll;
>> +#endif
> Why even restrict that to WinRT? You can poll first then read
> everywhere.

This was the case before this commit:

commit 3328b21b5b18721ff541cb326ff472a42d1bef4f
Author: Rémi Denis-Courmont <remi at remlab.net>
Date:   Sun Jul 21 19:37:06 2013 +0300

    net_Read: rewrite, fix corner cases (fix #8972)

    This new implementation opportunistically tries to read data before
    invoking poll(). This reduces latency when data is already waiting in
    buffers, allows receiving pending data in non-blocking fashion even if
    the object has been killed. This also gives GnuTLS a chance to dequeue
    data from internal buffers.

    Also the corner case of 0 read should now be handled correctly.

    The corner case of an error after success read is no longer handled.
    This was race-prone and useless.

Note this patch misses:
 if (!vs) goto do_poll;

to not reintroduce the same bug, although I am not sure if we can use
gnutls on Windows Store.

> Regards,

More information about the vlc-devel mailing list