docs: public void unlock(Object lockName, Locker locker)
      {
          synchronized (lockTable) {
  
              Object o = lockTable.remove(lockName);
              if (o == null || o == locker) {
  
                  //----------------------------------------------------------
                  // Fastpath: no conflicts, the given locker was only holder,
                  // nothing to do.
                  //----------------------------------------------------------
  
              } else {
  
                  //--------------------------------------------------
                  // Conflict: the lock table entry must be an actual
                  // lock instance or an error has occurred.
                  //--------------------------------------------------
  
                  Lock theLock = (Lock) o;
                  if (theLock.release(locker) != 0) {
                      lockTable.put(lockName, theLock);
                  }
              }
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
              Tr.debug(tc, "lock released", new Object[] { lockName, locker });
          }
      }