SIGPIPE in the GHC runtime
Brian Bloniarz
brian.bloniarz at gmail.com
Wed Aug 18 23:27:24 EDT 2010
On 08/18/2010 07:06 PM, Donn Cave wrote:
> Quoth Brian Bloniarz <brian.bloniarz at gmail.com>,
> ...
>> 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 at 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
More information about the Glasgow-haskell-users
mailing list