In TimeSliceThread::run() could if (msUntilNextCall >= 0)
clientBeingCalled->nextCallTime += RelativeTime::milliseconds (msUntilNextCall);
else
clients.removeFirstMatchingValue (clientBeingCalled);
be changed to
if (msUntilNextCall >= 0)
clientBeingCalled->nextCallTime = now + RelativeTime::milliseconds (msUntilNextCall);
else
clients.removeFirstMatchingValue (clientBeingCalled);
This way other threads that come later in the list of clients get a change to get a slice.
