- DONE Rename from unliftio-protocols to unliftio-messagebox
- DONE Move
Protocol.MessageBox.*
toUnliftIO.MessageBox
- DONE Move
Protocol.Command
toUnliftIO.MessageBox.Command
- DONE Move
Protocol.CallId
toUnliftIO.MessageBox.Util.CallId
- DONE Move
Protocol.Fresh
toUnliftIO.MessageBox.Util.Fresh
- DONE Move
Protocol.Future
toUnliftIO.MessageBox.Util.Future
- DONE Add a
UnliftIO.MessageBox
that re-exports:UnliftIO.MessageBox.Class
UnliftIO.MessageBox.Limited(BlockingBox, NonBlockingBox, WaitingBox, MessageLimit)
UnliftIO.MessageBox.Unlimited(UnlimitedBox)
UnliftIO.MessageBox.CatchAll
UnliftIO.MessageBox.Command
UnliftIO.MessageBox.CallId
UnliftIO.MessageBox.Fresh
UnliftIO.MessageBox.Future
- DONE Write property tests exhibiting race
conditions like shutdown races that
provokes ThreadBlockedIndefinitelyOnMVar
- DONE Not much to gain here... Unagi never seems to throw stuff the way we use it.
- DONE make a
NoExc
newtype wrapper that catches all exceptions forIsMessageBox
andIsInput
- DONE Apply lock contention test to Unlimited message box implementation
- DONE Write unit tests for untested code
- DONE Protocol.Command
- DONE Protocol.Command.CallId
- DONEProtocol.Fresh
- DONEProtocol.MessageBox.CatchAll
- DONEProtocol.MessageBox.Limited
- DONE Remove unused code
- UP NEXT Write missing Documentation
- DONE Document that in 'call' the timeout is not for message delivery, but only for waiting for the reply.
- DONE receiveAfter tests
- DONE receiveAfter benchmarks (part of MediaBenchmark)
- DONE Implement async call API
- DONE REJECTED Use the async call API in the sync call API.
- DONE Write script to commit the results of benchmarks, tests, test profiling and test code coverage reports to a branch of the git repo
- DONE REJECTED: Weeder requires to much recompiling Add Weeder script
- DONE Add Haddock script
- DONE Add graphmod script
- DONE Add profiling test case execution script
- DONE Reduce the number of benchmarks
- DONE Make a profiling report based on a subset of the benchmarks
- DONE Link to the reports from the README.md
- Make a benchmark for the Erlang code
- Make Erlang part of the nix-based environment
- benchmark TMVar vs MVar for reply box
- DONE: TMVar are faster because the timeout is based on registerDelay
- benchmark type class methods vs. direct function calls
- DONE: No big difference
- DONE Extract the media benchmark and create a long running example program that checks for memory leaks
- DONE Goal achieved in a different way Use Weak References for
Input
s- Add 'isActive'
- Catch
ThreadBlockedIndefinitelyInMVarOperation
- DONE Fix 'Command.call': Even when the result is there the call waits for the timeout
- Make sure that no messages are lost through async exceptions (e.g. timeout)
when receiving
- DONE Nothing that can be done! Make your application robust.
- UP NEXT Allow logging/cleanup of messages receive were to drop when an async exception is received.
- Allow logging/cleanup of messages that are lost when an Async exception was raised after a reply was taken from the reply box, but before it was returned.
- Add IsMessageBox/IsInput instances that wrap the calls in a
try_
block- DONE
- Add IsMessageBox/IsInput instances through newtype wrappers
to Handle dead lock exceptions
- DONE
- Make usages of MVars or TVars e.g.
replyTo
,handleMessage
,receive
dead lock exception safe- DONE
- make the timeout in handleMessage pluggable
(use newtype wrapper for IsMessageBox instances)
- DONE With Waiting..