private void getAndReleaseGrantIfLockedBy(Object name, InternalDistributedMember owner,
      int lockId) {
    synchronized (grantTokens) {
      DLockGrantToken grantToken = basicGetGrantToken(name);
      if (grantToken != null) { // checking isTokenDestroyed here will deadlock
        synchronized (grantToken) {
          // if (!grantToken.isTokenDestroyed())
          try {
            grantToken.releaseIfLockedBy(owner, lockId);
            removeGrantIfUnused(grantToken);
          } catch (IllegalStateException e) {
            dlock.checkDestroyed();
            checkDestroyed();
            // must have hit race... grantor doesn't have the token
            return;
          }
        }
      }
    }
  }
Fetches the actual grant token and releases it if leased by owner using lockId.
DLockReleaseMessage.basicProcess -> releaseIfLocked -> getAndReleaseGrantIfLockedBy
<p>
Caller must hold destroyReadLock. Synchronizes on grantTokens and the grant token.

@param name the name of the lock to release
@param owner the member attempting to release the granted lock
@param lockId the id of the lease used by the owner guarded.By
       {@link #acquireDestroyReadLock(long)}
geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DLockGrantor.java