Package: glibc
Version: 2.3.2.ds1-20
Coin,
Here is a simple poll() test case :
(hurd poll() directly uses hurd_select())
<quote file="poll.c">
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/poll.h>
int main(void)
{
struct pollfd pfd[1];
int fd, ret;
char c;
fd = open("zzz", O_RDONLY);
pfd[0].fd = fd;
pfd[0].events = POLLIN;
while ((ret = poll(pfd, 1, 10)) >= 0)
{
if (ret == 0)
continue;
if (pfd[0].revents & POLLERR)
break;
if (pfd[0].revents & POLLIN)
{
printf("DATA !\n");
read(fd, &c, 1);
}
}
return 0;
}
</quote>
Test :
mkfifo zzz
./poll &
echo "coin" >zzz
Result on linux :
DATA !
DATA !
DATA !
DATA !
DATA !
I've got 1 "DATA !" per character (including "\n").
Result on Hurd :
DATA !
DATA !
DATA !
DATA !
DATA !
DATA !
DATA !
[...]
I've got an infinite number of "DATA !".
It is like if the select state is not reset after reading.
I tried to find the bug but i need help, this software is not an easy peace.
Thanks.
--
Marc Dequènes (Duck)
Attachment:
pgp0lKJoISfPQ.pgp
Description: PGP signature