From 80401853b1ceb0e04f1ea56f572e1ac37deb1515 Mon Sep 17 00:00:00 2001 From: Pino Toscano Date: Mon, 31 Oct 2011 21:37:04 +0000 Subject: [PATCH] Fix hang in ext/POSIX/t/sysconf.t on GNU/Hurd while compiling perl 5.14.2 on GNU/Hurd, I ran into what it seems a undefined POSIX behaviour in ext/POSIX/t/sysconf.t. my $fd = POSIX::open($fifo, O_RDWR) or skip("could not open $fifo ($!)", 3 * @path_consts_fifo); according to the POSIX open()[1] about O_RDWR, The result is undefined if this flag is applied to a FIFO. .... which is actually our case. Apparently Linux and *FreeBSD (and maybe also OSes) accept this behaviour, but on GNU/Hurd this causes the open() call to block undefinitely. Given there's nothing done with the FIFO if not querying {,f}pathconf() values, the proposed solution I attached is to change the opening mode to "O_RDONLY | O_NONBLOCK". [1] http://pubs.opengroup.org/onlinepubs/9699919799/functions/open.html --- ext/POSIX/t/sysconf.t | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/POSIX/t/sysconf.t b/ext/POSIX/t/sysconf.t index 8008996b6373..65625a85422f 100644 --- a/ext/POSIX/t/sysconf.t +++ b/ext/POSIX/t/sysconf.t @@ -125,7 +125,7 @@ SKIP: { or skip("could not create fifo $fifo ($!)", 2 * 3 * @path_consts_fifo); SKIP: { - my $fd = POSIX::open($fifo, O_RDWR) + my $fd = POSIX::open($fifo, O_RDONLY | O_NONBLOCK) or skip("could not open $fifo ($!)", 3 * @path_consts_fifo); for my $constant (@path_consts_fifo) {