---------------------------------------------------------------------------
Missing or Incompleteness
---------------------------------------------------------------------------
We are not currently destroying threads ever. After they are created they
stay created until the end of the process. We need to find a way to
periodically walk the free-list to shutdown old threads.
IrisScheduler
Either add use of execution notify, or remove it from the
signatures.
IrisMessage
We should make the ref-counting for messages use the sink concept
so that you don't need to unref your messages if you hit the usual
use-case of create->post.
Alex added warnings for GSimpleAsyncResult when not used from main thread.
We need to implement our own now since this isn't reusable.
---------------------------------------------------------------------------
Optimization TODO's
---------------------------------------------------------------------------
iris_message_unref()
This method shows up on the profile. It has considerable wait time
which is probably attributed to using g_slice_*(). We should look
at options from pulse audio which use lock-free algorithms.
The changes here should also be applied to the IrisThreadWork
data structure.
Lets verify this is really an issue, I highly doubt it now. The
frequent allocations for thread work might be a good idea to move
to a free list though, so we reduce pressure on gslice.
iris_port_post()
iris_receiver_deliver_real()
These related methods have significant wait time. This could be
both from the atomic operations as well as the locks incurred.
How can we reduce the potential for lock in these situations?