From the discussion of "Help needed interrupting accepting a network
connection", what we have so far is:
* To break out of an "accept" call, an asynchronous exception is needed. * The presence of asynchronous exceptions complicates the other code used to report if "accept" completed or was interrupted, whether that code is written using MVar's or STM. Thus the next question is what guarantees, if any, do interruptible operations possess? For example, suppose that inside of a "block", a putMVar operation was guaranteed to either interrupt and allow an asynchronous exception to be raised, or to complete the putMVar operation, but not both. If this were true, then if you caught an asynchronous exception from the putMVar operation, you'd know that a value was not put into the MVar by the operation. Then it would be easy to program with MVar's in the presence of asynchronous exceptions. When you caught an asynchronous exception, you could set a flag, and then redo the putMVar. The same question can be asked of other interruptible operations. For the "accept" call itself, is it guaranteed (inside of a "block") to either accept a connection, or be interrupted and allow an asynchronous exception to be raised, but not both? For STM, is "atomically" an interruptible operation? If it is, what guarantees does it offer in the presence of asynchronous exceptions? _______________________________________________ Haskell mailing list Haskell@haskell.org http://www.haskell.org/mailman/listinfo/haskell