code: private final Result lockForUpgrade_(L locker) {
          Result result;
          if ((result = tryLockForUpgrade_(locker)) == Result.FAILED) {
              result = lockForUpgradeQueued(locker, addUpgradeWaiter());
          }
          return result;
      }
docs: Acquire an upgrade lock, possibly blocking indefinitely.
  
  @param locker object trying to become lock owner
  @return ACQUIRED or OWNED