docs: final boolean waitForEvent() throws InterruptedException {
          // must get the event count BEFORE releasing the read locks
          // to avoid a lost update
          final int oldEventCount = eventLock.getEventCount();
          final int readLockCount = releaseReadLocks();
          if (readLockCount == 0)
              throw new IllegalStateException("Must hold read lock");
          if (getWriteHoldCount() > 0)
              throw new IllegalStateException("Must not hold write lock");
          try {
              return eventLock.wait(oldEventCount);
          } finally {
              acquireReadLocks(readLockCount);
          }
      }