On 22/09/2010 02:18, Mitar wrote:
Hi!
On Tue, Sep 21, 2010 at 11:10 PM, Simon Marlow<[email protected]> wrote:
So rather than admitting defeat here I'd like to see it become the norm to
write async-exception-safe code.
This is also what I think. You have to make your code work with
exceptions, because they will come sooner or later. So if you handle
them properly, once you have this implemented, then you can easily use
them also for your own stuff.
It's not that hard, especially with the new mask API coming in GHC 7.0.
Not hard? I see it almost impossible without mask. You cannot have
arbitrary long cleanup functions in for example bracket because
somebody can (and will) interrupt it even if you block, because some
function somewhere deep bellow will unblock.
mask doesn't save you from this, because a function in a library below
you might perform an interruptible operation like takeMVar, and that
operation could receive another asynchronous exception. You could use
maskUninterruptible, but that's not a good solution either - if an
operation during cleanup really does block, you'd like to be able to
Control-C your way out.
So the only way out of this hole is: don't write long cleanup code that
needs to mask exceptions. Find another way to do it.
Cheers,
Simon
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe