The errno I got on Hurd is `EIEIO 1073741928 Computer bought the
farm`... Seems a Hurd specific errno...

That is really non-conformant, and deserves to be reported to the Hurd
team.

What is happening is that "control" is a named pipe, and the attempted
operation is open(control, O_WRONLY | O_NONBLOCK). If the service isn't
running (which is the normal case here because it's a check performed at
start, to avoid duplicating a service that is already running), there is
no reader on the "control" fifo. And POSIX is very clear on what must
happen in that case:
https://pubs.opengroup.org/onlinepubs/9699919799/functions/open.html says:

[ENXIO]
O_NONBLOCK is set, the named file is a FIFO, O_WRONLY is set, and no process has the file open for reading.

which is *exactly* what's happening here. Hurd should return -1 ENXIO,
unless there is a real problem with the underlying file system - and the
test your patch comments exists to catch such problems.

I think your patch is the correct workaround (although you could
specifically catch ENXIO *and* EIEIO instead, and still die on other error
codes), but I'm not upstreaming it because the problem isn't in s6.
I would suggest keeping the patch in your tree until Hurd is fixed.

--
Laurent

Reply via email to