
On 08/18/2010 07:06 PM, Donn Cave wrote:
Quoth Brian Bloniarz
, ... I just tested linux in this scenario, it gives EPIPE as I'd expect. Linux's SA_RESTART has been reliable in my limited experience. Do you have an OpenSolaris install to test by any chance? The code is below.
No, sorry! But I don't doubt that with the right compile options and so forth, that test would work fine on OpenSolaris. Without knowing what really caused the problem I mentioned, I can't guess how to duplicate the problem or test for it. (Cf. "hGetContents: resource exhausted", Haskell Cafe, lally.singh@gmail.com.) I know that's rather unhelpful. I hate unnecessary signals.
Thanks for the pointer! I can try to dig around, but yeah I'd be tempted to just hope for the best given that the patch I posted won't make matters worse.
A less elegant variaton on that would be to block SIGPIPE, instead of ignoring it. I don't have a great deal of practical experience with that, nor have I looked at how it would fit with GHC runtime code, but execve(2) does reset the signal mask, so it would have the inheritance properties you want.
I think the signal mask is retained across exec (!). http://www.opengroup.org/onlinepubs/009695399/functions/execl.html Search for "the new process will inherit"; experimentally, linux retains it. -Brian