void releaseIfLocked(Object name,InternalDistributedMember owner,int lockId) throws InterruptedException {
  waitWhileInitializing();
  if (!acquireDestroyReadLock(0)) {
    waitUntilDestroyed();
    checkDestroyed();
  }
  try {
    checkDestroyed();
    getAndReleaseGrantIfLockedBy(name,owner,lockId);
  }
  finally {
    releaseDestroyReadLock();
  }
}

void releaseIfLocked ( Object name , InternalDistributedMember owner , int lockId ) throws InterruptedException { waitWhileInitializing ( ) ; if ( ! acquireDestroyReadLock ( 0 ) ) { waitUntilDestroyed ( ) ; checkDestroyed ( ) ; } try { checkDestroyed ( ) ; getAndReleaseGrantIfLockedBy ( name , owner , lockId ) ; } finally { releaseDestroyReadLock ( ) ; } }
release named lock if held by owner using lockid . called from dlockreleasemessage . basicprocess for remote unlock . < p > acquires destroyreadlock . synchronizes on granttokens and the grant token .
