in server/src/main/java/org/apache/asyncweb/server/util/LinkedPermitIssuer.java [359:386]
private PermitEntry processFirst() {
PermitEntry entry = head;
boolean expired = false;
long timeToExpiry = entry.timeToExpiry();
while (!isClosed && !entry.isCancelled() && timeToExpiry > 0) {
try {
if (LOG.isDebugEnabled()) {
LOG.debug("Waiting for head entry to expire: "
+ timeToExpiry + "ms");
}
lock.wait(timeToExpiry);
} catch (InterruptedException e) {
throw new RuntimeException("Unexpected interrupt");
}
timeToExpiry = entry.timeToExpiry();
}
if (entry.isCancelled()) {
LOG.debug("Head entry is cancelled. Removing");
removeHead();
} else if (!isClosed) {
LOG.debug("Head entry has expired");
entry.markCancelled();
removeHead();
expired = true;
}
return expired ? entry : null;
}