Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,16 @@ public void testSemaphoreLeakOnLBRetry() throws Exception {
+ " fires synchronously on the IO thread before onComplete can release().");
}

int permitsAfterFailures = testClient.asyncTrackerAvailablePermits();
// Poll briefly: apiFutures complete on the executor thread, but completeListener fires on
// Jetty's IO thread after response listeners, so allOf().get() can race ahead of release().
int permitsAfterFailures;
long deadline = System.nanoTime() + TimeUnit.SECONDS.toNanos(5);
do {
permitsAfterFailures = testClient.asyncTrackerAvailablePermits();
if (permitsAfterFailures == MAX_PERMITS) break;
//noinspection BusyWait
Thread.sleep(10);
} while (System.nanoTime() < deadline);
log.info("Permits after retries: {}/{}", permitsAfterFailures, MAX_PERMITS);
assertEquals(
"All permits should be restored after retries complete",
Expand Down
Loading