code: public boolean aquire(final Object resource, final ValueLockSupport lockHolder) throws InterruptedException,
        IOException
     {
        final Thread myThread = Thread.currentThread();
        final VDResource res = resources.get(resource);
        if (res != null)
        {
           if (res.addUserLock(myThread, lockHolder))
              // resource locked in this thread (by me)
              return false;
  
           synchronized (res.lock)
           {
              // resource locked, wait for unlock
              res.lock.wait();
              // new record with existing lock (to respect Object.notify())
              resources.put(resource, new VDResource(myThread, res.lock, lockHolder));
           }
        }
        else
           resources.put(resource, new VDResource(myThread, new Object(), lockHolder));
  
        return true;
     }
docs: Aquire ValueData resource.
  
  @param resource
  Object
  @param lockHolder
  ValueLockSupport
  @throws InterruptedException
  if resource lock is interrupted
  @return boolean, false - if the resource reaquired by the same user (Thread), true otherwise
  @throws IOException
  if lock error occurs