The code was slightly incorrect previously: if the standard descriptors
are closed to begin with, then the pipe ends up being closed on entry.
As far as I know, this has never actually happened, but I have the
machinery to fix this bug so I might as well use it.