quireForUse(@SuppressWarnings("unused") final Object acquirer) throws IOException {
    while (true) {//CAS loop:
      final int packedState = statePacked;
      final int state = unpackState(packedState);
      final int usageCount = unpackUsageCount(packedState);
      if (state < STATE_USABLE) {
        return false;
      }
      else if (state > STATE_ABOUT_TO_UNMAP) {
        throw new IOException("Page.state[=" + state + "] != USABLE");
      }
      else if (state == STATE_ABOUT_TO_UNMAP) {
        throw new IOException("Page.state[=" + state + "] != USABLE");
      }
      //else -> try to acquire:

      final int newUsageCount = usageCount + 1;
      if (newUsageCount > USAGE_COUNT_MASK) {
        throw new AssertionError("Too many usages: " + newUsageCount
                                 + " (max: " + USAGE_COUNT_MASK + ") -- likely .release() call is missed");
      }
      final int newPackedState = packState(state, newUsageCount);
      if (STATE_UPDATER.compareAndSet(this, packedState, newPackedState)) {
        return true;
      }
    }
  }

  @Override
  publ
quireForUse(@SuppressWarnings("unused") final Object acquirer) throws IOException 