[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