protected long handleRequestTimeouts() {
      long smallestTimeout = Long.MAX_VALUE;
      synchronized (this) {
        if (pendingRequests == null) {
          return smallestTimeout;
        }
        if (grantor.isDestroyed()) {
          return smallestTimeout;
        }
      }
      List timeouts = new ArrayList();

      // narrow timeouts to just contain requests that have timed out...
      DLockRequestMessage req = null;
      // ... copyRequests is synchronized on this ...
      synchronized (this) {
        for (final Object pendingRequest : pendingRequests) {
          req = (DLockRequestMessage) pendingRequest;
          if (req.checkForTimeout()) { // sends DLockResponseMessage if timeout
            grantor.cleanupSuspendState(req);
            timeouts.add(req);
          } else {
            long timeout = req.getTimeoutTS();
            if (timeout < smallestTimeout) {
              smallestTimeout = timeout;
            }
          }
        }
        removeRequests(timeouts);
      }

      return smallestTimeout;
    }
Handle timeouts for requests waiting on this lock. Any requests that have timed out will be
removed. Calculates and returns the next smallest timeout of the requests still waiting on
this lock.
<p>
Synchronizes on this grant token.

@return next smallest timeout of the requests still waiting on this lock
geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DLockGrantor.java