//////////////////////////////////////////////////////////////////////////
// When Done
//////////////////////////////////////////////////////////////////////////
internal void sendWhenDone(Actor a, Future f)
{
// if already done, then set immediate flag
// otherwise add to our when done list
bool immediate = false;
lock (this)
{
if (isDone())
{
immediate = true;
}
else
{
if (whenDone == null)
{
whenDone = new ArrayList();
}
whenDone.Add(new WhenDone(a, f));
}
}
// if immediate we are already done so enqueue immediately
if (immediate)
{
try { a._enqueue(f, false); }
catch (System.Exception e) { Err.dumpStack(e); }
}
}