[vlc-devel] [PATCH 1/4] os2: thread: set POLLNVAL instead of returning -1 if not a socket

KO Myung-Hun komh78 at gmail.com
Sun Oct 4 13:30:04 CEST 2015



Rémi Denis-Courmont wrote:
> Le 2015-09-15 18:17, KO Myung-Hun a écrit :
>> Rémi Denis-Courmont wrote:
>>> Le 2015-09-13 10:54, KO Myung-Hun a écrit :
>>>> KO Myung-Hun wrote:
>>>>> From: KO Myung-Hun <komh78 at gmail.com>
>>>>>
>>>>> ---
>>>>>  src/os2/thread.c | 32 +++++++++++++++++++++++++-------
>>>>>  1 file changed, 25 insertions(+), 7 deletions(-)
>>>>>
>>>>
>>>> Updated.
>>>
>>> FWIW, I think the patch gives incorrect results if there are more than
>>> one non-socket or bad file descriptors in the set. Bad file descriptors
>>> should never happen, but regular files and pipes definitely do.
>>>
>>
>> Fixed.
> 
> It looks to me that this gives incorrect results on poll(whatever, 0,
> timeout);
> 
> 

I did simple tests on OS/2 and Linux. And I could get the same results
from both OSes.

Here is the test code. Any problems ?

-----
#include <stdio.h>
#include <sys/socket.h>
#include <unistd.h>

#include "poll.h"

#define FD_SIZE 2

void poll_test( const char *msg, struct pollfd *fds, int n, int timeout )
{
    int i;
    int rc;

    printf("%s\n", msg );

    rc = poll( fds, n, timeout );

    printf("rc = %d\n", rc );

    for( i = 0; i < n; i++ )
    {
        printf("fd = %d, events = %x, revents = %x\n",
               fds[ i ].fd, fds[ i ].events, fds[ i ].revents );
    }

    printf("\n");
}

int main( void )
{
    struct pollfd fds[ 2 ];
    int sv[ 2 ];

    fds[ 0 ].fd     = 100;  /* invalid handle */
    fds[ 0 ].events = POLLIN;

    socketpair( AF_LOCAL, SOCK_STREAM, 0, sv );

    fds[ 1 ].fd     = sv[ 0 ];
    fds[ 1 ].events = POLLIN;

    poll_test("An invalid handle only, 0 timeout.",
              fds, 1, 0 );

    poll_test("An invalid handle only, 1000 timeout.",
              fds, 1, 1000 );

    poll_test("An invalid handle only, -1 timeout.",
              fds, 1, -1 );

    poll_test("A not-read-ready-socket only, 0 timeout.",
              fds + 1, 1, 0 );

    poll_test("A not-read-ready-socket only, 1000 timeout.",
              fds + 1, 1, 1000 );

#if 0
    poll_test("A not-read-ready-socket only, -1 timeout.",
              fds + 1, 1, -1 );
#endif

    poll_test("An invalid handle and a not-read-ready-socket, 0 timeout.",
              fds, 2, 0 );

    poll_test("An invalid handle and a not-read-ready-socket, 1000
timeout.",
              fds, 2, 1000 );

    poll_test("An invalid handle and a not-read-ready-socket, -1 timeout.",
              fds, 2, -1 );

    write( sv[ 1 ], "\0", 1 );

    poll_test("A read-ready-socket only, 0 timeout.",
              fds + 1, 1, 0 );

    poll_test("A read-ready-socket only, 1000 timeout.",
              fds + 1, 1, 1000 );

    poll_test("A read-ready-socket only, -1 timeout.",
              fds + 1, 1, -1 );

    poll_test("An invalid handle and a read-ready-socket, 0 timeout.",
              fds, 2, 0 );

    poll_test("An invalid handle and a read-ready-socket, 1000 timeout.",
              fds, 2, 1000 );

    poll_test("An invalid handle and a read-ready-socket, -1 timeout.",
              fds, 2, -1 );

    close( sv[ 0 ]);
    close( sv[ 1 ]);

    return 0;
}
-----

-- 
KO Myung-Hun

Using Mozilla SeaMonkey 2.7.2
Under OS/2 Warp 4 for Korean with FixPak #15
In VirtualBox v4.1.32 on Intel Core i7-3615QM 2.30GHz with 8GB RAM

Korean OS/2 User Community : http://www.ecomstation.co.kr



More information about the vlc-devel mailing list