void () { while (true) { final Semaphore semaphore = new Semaphore(); synchronized (myLock) { if (!myRequestSubmitted && !myRequestRunning) { return; } if (!myRequestRunning) { myScheduler.submit(new RefreshRunnable()); } semaphore.down(); myWaitingUpdateCompletionSemaphores.add(semaphore); } if (!semaphore.waitFor(100 * 1000)) { LOG.error("Too long VCS update\n" + ThreadDumper.dumpThreadsToString()); return; } } }