Bug#942558: hurd: should return ENXIO instead of EIEIO in open()
On Fri, Oct 18, 2019 at 2:38 PM Samuel Thibault wrote: > > Hello, > > Shengjing Zhu, le ven. 18 oct. 2019 13:26:58 +0800, a ecrit: > > When calling open(fifo_fd, O_WRONLY | O_NONBLOCK) on an fifo file, which has > > no reader, it should return ENXIO. But on Hurd, it returns EIEIO. > > I guess you mean it does this consistently? > consistently on the qemu vm, with the image downloaded from cdimage.d.o. I think it can be reproduced by following snippets, ``` #include #include #include #include int main() { char *s = "test"; mkfifo(s, S_IRUSR | S_IWUSR); open(s, O_WRONLY | O_NONBLOCK); perror(NULL); return 0; } ``` On linux, it prints "No such device or address"; On the hurd vm, it prints "Computer bought the farm". -- Shengjing Zhu
Bug#942558: hurd: should return ENXIO instead of EIEIO in open()
On Fri, 2019-10-18 at 23:37 +0800, Shengjing Zhu wrote: > On Fri, Oct 18, 2019 at 2:38 PM Samuel Thibault > wrote: > > Hello, > > > > Shengjing Zhu, le ven. 18 oct. 2019 13:26:58 +0800, a ecrit: > > > When calling open(fifo_fd, O_WRONLY | O_NONBLOCK) on an fifo > > > file, which has > > > no reader, it should return ENXIO. But on Hurd, it returns EIEIO. > > > > I guess you mean it does this consistently? > > > > consistently on the qemu vm, with the image downloaded from > cdimage.d.o. > > I think it can be reproduced by following snippets, > > ``` > #include > #include > #include > #include > > int main() { > char *s = "test"; > mkfifo(s, S_IRUSR | S_IWUSR); > open(s, O_WRONLY | O_NONBLOCK); > perror(NULL); > return 0; > } > ``` > > On linux, it prints "No such device or address"; > On the hurd vm, it prints "Computer bought the farm". > Confirmed: ./test_fifo Computer bought the farm And it does not seem to kill the translator: ps -feM|grep fifo srs 11016 411 0:00.00 /hurd/fifo
Bug#942558: hurd: should return ENXIO instead of EIEIO in open()
Svante Signell, le ven. 18 oct. 2019 19:16:01 +0200, a ecrit: > On Fri, 2019-10-18 at 23:37 +0800, Shengjing Zhu wrote: > > On Fri, Oct 18, 2019 at 2:38 PM Samuel Thibault > > wrote: > > > Hello, > > > > > > Shengjing Zhu, le ven. 18 oct. 2019 13:26:58 +0800, a ecrit: > > > > When calling open(fifo_fd, O_WRONLY | O_NONBLOCK) on an fifo > > > > file, which has > > > > no reader, it should return ENXIO. But on Hurd, it returns EIEIO. > > > > > > I guess you mean it does this consistently? > > > > > > > consistently on the qemu vm, with the image downloaded from > > cdimage.d.o. > > > > I think it can be reproduced by following snippets, > > > > ``` > > #include > > #include > > #include > > #include > > > > int main() { > > char *s = "test"; > > mkfifo(s, S_IRUSR | S_IWUSR); > > open(s, O_WRONLY | O_NONBLOCK); > > perror(NULL); > > return 0; > > } > > ``` > > > > On linux, it prints "No such device or address"; > > On the hurd vm, it prints "Computer bought the farm". > > > Confirmed: > ./test_fifo > Computer bought the farm > > And it does not seem to kill the translator: > ps -feM|grep fifo > srs 11016 411 0:00.00 /hurd/fifo It would be useful to check which underlying RPC is returning this error, and checking why /hurd/fifo doesn't seem to behave well in that case. Samuel