On 07:16, Thu, Nov 13, 2014 Yuras Shumovich <shumovichy@gmail.com> wrote:

On Thu, 2014-11-13 at 15:51 +0200, Eyal Lotem wrote:
> On Thu, Nov 13, 2014 at 1:21 PM, Yuras Shumovich <shumovichy@gmail.com>
> wrote:
> > You probably have some special requirements, but that code is bad in
> > general case. It doesn't guaranty anything because the process may never
> > exit. Here you probably should try to terminate it (and close standard
> > streams if any) and then wait for it. (Unless the process is short
> > living *and* doesn't communicate with parent.)
> >
>
> That is true - and indeed my code does actually have a terminateProcess
> <https://github.com/ElastiLotem/buildsome/blob/master/src/Lib/Process.hs#L21-L32>
> in there right before waiting for the process (and more stuff too).

Hmm, at the first glance, the code looks overengineered. I wonder
whether it is correct even under uninterruptibleMask. I may miss the
point though, but I'm not surprised you had hard times with it.

I think auditing code to see if it should be refactored to avoid this problem is fruitful. Functions like bracket should "just work", so they can be used reliably even by novice programmers. Currently that's not the case.

Your objection seems to be that users should know how to write reliable handlers. While that's certainly true, I think we should make it as easy as possible to do so.  Deep knowledge of async exceptions is IMHO just plain excessive.