Cat Dancer wrote: > I have a prospective implementation of a network accept loop with > graceful shutdown. >
Could you add info about where to get your code (or the code) itself to the wiki at http://haskell.org/haskellwiki/Concurrency_demos/Graceful_exit ? > To avoid the "unlock (return ())" issue that Chris discovered, this > implementation uses an additional MVar to indicate that a shutdown is > in process. Thus (if the implementation is correct) the accept loop > will shutdown either because of the MVar flag or by receiving the > asynchronous exception inside of the 'accept'. Small clarification: You don't need a safepoint in your code. But "unblock yield" is the right code for a safepoint; the "unblock (return ())" suggested by the published paper *does not work* in my small test, while "unblock yield" worked every time in a small test. Simon may updated the documentation eventually to reflect this. > To address the issue that Chris noticed of a race condition that new > threads cannot be started in a 'block' state, yet another MVar is set > by the accept thread to indicate that it is now inside of a 'block' > and is ready to receive the asynchronous exception. _______________________________________________ Haskell mailing list Haskell@haskell.org http://www.haskell.org/mailman/listinfo/haskell