// so long as we _will_ eventually receive a signal
if (taskPermits(permits.get()) > maxTasksQueued)
{
// if we're blocking, we might as well directly schedule a worker if we aren't already at max
if (takeWorkPermit(true))
pool.schedule(new Work(this));
totalBlocked.incrementAndGet();
currentlyBlocked.incrementAndGet();
s.awaitUninterruptibly();
currentlyBlocked.decrementAndGet();
}